首页 文章

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

提问于
浏览
1

我使用以下aql查询将文件从文件上传到数据库 "FOR document in @file INSERT document INTO @@collection LET newDoc = NEW RETURN newDoc" . 我为集合中的所有属性创建了一个唯一的哈希索引,因此当尝试上载重复的文档时,我得到一个错误(我想要的),但是文件中的所有文档都没有上传到数据库 . 我想知道是否有一种方法只使用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查询而不是“手动”逐个上传

1 回答

  • 2

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

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

    然后,它将忽略具有冲突的文档,并仅返回实际创建的文档 .

    如果您尝试仅返回 _key 字段,则每个失败的文档都会获得 null

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

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

    [ 
      null, 
      "23225" 
    ]
    

相关问题