2016-04-07 14 views

Antwort

3

Der Arango Weg dies zu tun ist to use a uniq hash index. Es kann jedoch nicht über das gesamte Dokument erstellt wird, nur Teile davon:

db._create("testuniq") 
[ArangoCollection 25260888467, "testuniq" (type document, status loaded)] 
arangosh [_system]> db.testuniq.ensureIndex({ type: "hash", fields:["uniqDocument", "uniqAttribute"], unique: true }) 
{ 
    "id" : "testuniq/25264886163", 
    "type" : "hash", 
    "fields" : [ 
    "uniqDocument", 
    "uniqAttribute" 
    ], 
    "selectivityEstimate" : 1, 
    "unique" : true, 
    "sparse" : false, 
    "isNewlyCreated" : true, 
    "code" : 201 
} 
arangosh [_system]> db.testuniq.save({uniqDocument: {foo: "bar"}}) 
arangosh [_system]> db.testuniq.save({uniqDocument: {foo: "bar"}}) 
JavaScript exception in file 'js/client/modules/org/arangodb/arangosh.js' at 106,13: ArangoError 1210: cannot create document, unique constraint violated 
!  throw error; 
!   ^
stacktrace: ArangoError: cannot create document, unique constraint violated 
    at Object.exports.checkRequestResult (js/client/modules/org/arangodb/arangosh.js:104:21) 
    at ArangoCollection.save.ArangoCollection.insert (js/client/modules/org/arangodb/arango-collection.js:1014:12) 
    at <shell command>:1:13 
arangosh [_system]> db.testuniq.save({uniqAttribute: "bar"}) 
arangosh [_system]> db.testuniq.save({uniqAttribute: "bar"}) 
JavaScript exception in file 'js/client/modules/org/arangodb/arangosh.js' at 106,13: ArangoError 1210: cannot create document, unique constraint violated 
!  throw error; 
!   ^
stacktrace: ArangoError: cannot create document, unique constraint violated 
    at Object.exports.checkRequestResult (js/client/modules/org/arangodb/arangosh.js:104:21) 
    at ArangoCollection.save.ArangoCollection.insert (js/client/modules/org/arangodb/arango-collection.js:1014:12) 
    at <shell command>:1:13 
+0

Ich verstehe nicht, was Sie sagt: „Es kann nicht über das vollständige Dokument erstellt wird, nur Teile davon“. Ich habe einen uniq-Hash-Index für alle Attribute erstellt, die in meinen Dokumenten enthalten sind. Wenn ich versuche, ein Dokument mit denselben Werten für die indexierten Attribute als ein Dokument hochzuladen, das sich bereits in der Datenbank befindet, erhalte ich den angezeigten Fehler. Also ja, ich denke, dass Hash-Index der einfachste Weg ist, Duplikate zu vermeiden, obwohl es auch leicht zu vermeiden ist. – Dovi

+0

mit dem vollständigen Dokument meinte ich '{_id: '...', _key: '...', foo: true, bar: {...}}' - Sie können den Index nicht setzen das Toplevel-Dokument, aber zB alles was in 'bar' steht oder (als zusätzlicher Parameter überwacht) auch' foo' – dothebart

Verwandte Themen