2016-04-28 98 views
1

我正在使用以下aql查詢將文檔從文件上傳到數據庫"FOR document in @file INSERT document INTO @@collection LET newDoc = NEW RETURN newDoc"。 我爲集合中的所有屬性創建了一個唯一的哈希索引,因此當試圖上傳重複文檔時,我得到一個錯誤(我想要的),但是文件中沒有任何文檔上傳到數據庫。 我想知道是否有辦法上傳只有有效的文件,並跳過錯誤的(在我的情況下重複的文件)通過使用aql查詢。使用INSERT aql和arangodb跳過無效文檔並上傳單個文件中的有效文檔

UPDATE:

我使用Python和我可以通過一個爲上傳文件之一:

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" 

我在想,如果我可以用AQL查詢做到這一點,而不是「手動」上傳一個由一個

回答

2

您可以在查詢OPTIONS statement指定ignoreErrors: true這樣的:

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

然後它會忽略碰撞的文檔,並只會返回實際創建的文檔。

如果試圖只返回_key場,你會GETT爲每一個null失敗文件:

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

結果會是這樣的,第一個是重複的,第二新鮮產生_key與價值23225

[ 
    null, 
    "23225" 
]