2016-04-28 12 views
1

Ich verwende die folgende aql Abfrage für das Hochladen von Dokumenten aus einer Datei in die Datenbank "FOR document in @file INSERT document INTO @@collection LET newDoc = NEW RETURN newDoc". Ich habe einen eindeutigen Hash-Index für alle Attribute in der Sammlung erstellt. Beim Versuch, ein dupliziertes Dokument hochzuladen, erhalte ich einen Fehler (den ich wollte), aber dann wird keines der Dokumente aus der Datei in die Datenbank hochgeladen. Ich würde gerne wissen, ob es eine Möglichkeit gibt, nur die gültigen Dokumente hochzuladen und die falschen zu überspringen (in meinem Fall doppelte Dokumente), indem ich aql query verwende.Überspringen Sie ungültige Dokumente und laden Sie gültige aus einer Datei mit INSERT aql mit arangodb

UPDATE:

ich Python verwende und ich kann eins nach dem anderen Dokumente hochladen, wie:

for document in file: 
    doc = collection.createDocument() #function from pyArango 
    try: 
     for key, value in document.iteritems(): 
      doc[key] = value 
      doc.save() 
    except: 
     print "wrong document" 

ich mich gefragt, ob ich es mit AQL-Abfrage tun können und nicht „von Hand“ laden ein durch ein

Antwort

2

Sie ignoreErrors: true in der Abfrage OPTIONS statement wie folgt angeben:

FOR document in @file 
    INSERT document INTO @@collection OPTIONS {ignoreErrors: true} 
    RETURN NEW 

Es ignoriert dann die Dokumente mit Kollisionen und gibt nur die Dokumente zurück, die tatsächlich erstellt wurden.

Wenn Sie nur senden Sie das _key Feld versuchen, werden Sie ein null für jedes gett Dokument fehlgeschlagen:

FOR document in @file 
    INSERT document INTO @@collection OPTIONS {ignoreErrors: true} 
    RETURN NEW._key 

Das Ergebnis wird so aussehen, zuerst ein Duplikat ist, erzeugt die zweite frische _key mit Wert 23225:

[ 
    null, 
    "23225" 
]