使用带有 arangodb 的 INSERT aql 跳过无效文档并从单个文件上传有效文档

skip invalid documents and upload valid ones from single file using INSERT aql with arangodb

我正在使用以下 aql 查询将文档从文件上传到数据库 "FOR document in @file INSERT document INTO @@collection LET newDoc = NEW RETURN newDoc"。 我为集合中的所有属性创建了一个唯一的哈希索引,因此在尝试上传重复文档时出现错误(这是我想要的),但文件中的 none 文档已上传到数据库。 我想知道是否有办法使用 aql 查询只上传有效文件并跳过错误文件(在我的例子中是重复文件)。

更新:

我正在使用 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 查询而不是 "manually" 一个一个地上传

您可以在查询 OPTIONS statement 中指定 ignoreErrors: true,如下所示:

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

然后它将忽略有冲突的文档,并且只会 return 那些实际创建的文档。

如果您尝试仅 return _key 字段,您将得到每个失败文档的 null

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

结果将如下所示,第一个是重复的,第二个是新生成的 _key,值为 23225

[ 
  null, 
  "23225" 
]