使用带有 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"
]
我正在使用以下 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"
]