Arangodb插入多行并使用UPSERT

时间:2019-03-10 15:40:03

标签: arangodb aql

如何使用UPSERT在arangodb中插入多行? 集合包含唯一索引,可以防止插入重复的文档。 多次插入在没有唯一索引的情况下可以正常工作,但是如何处理具有唯一索引的多次插入的更新/替换?

像这样:

INSERT [{doc1},{doc2},{doc3}]
IN collection

UPDATE {} // when duplicate per document

更新1

SQL看起来像这样:

INSERT INTO table(name, value)
VALUES('a', '1'), ('b', 2), ('c', 3)

ON DUPLICATE KEY UPDATE name=`value`

谢谢。

1 个答案:

答案 0 :(得分:2)

ArangoDB支持UPSERT操作:https://docs.arangodb.com/3.3/AQL/Operations/Upsert.html

来自ArangoDB文档:

  

使用upsert操作的UPDATE变体时,找到的文档将被部分更新,这意味着将仅更新或添加在updateExpression中指定的属性。当使用upsert的REPLACE变体时,现有文档将被updateExpression的上下文替换。

您可以使用UPSERT来更新/替换/插入多个记录,如下所示:

让我们首先将collection属性的唯一哈希索引插入几个示例文档到您的name中:

FOR doc in [
    { "name": "Doc 1", "value": 1 }, 
    { "name": "Doc 2", "value": 1 }, 
    { "name": "Doc 3", "value": 1 }]

INSERT doc IN collection

现在,如果要执行批量增补,可以运行以下AQL:

FOR doc in [
    { "name": "Doc 2", "value": 2 }, 
    { "name": "Doc 3", "value": 2 },
    { "name": "Doc 4", "value": 1 }
]

UPSERT { "name": doc.name }

INSERT doc

UPDATE { "value": doc.value } in collection

上面的AQL查询插入一个新的Doc 4文档,并更新Doc 2Doc 3的值属性。