如何使用 UPSERT 在 arangodb 中插入多行?集合包含防止插入重复文档的唯一索引。多个插入在没有唯一索引的情况下可以正常工作,但是如何在具有唯一索引的多个插入中处理更新/替换?
像这样:
INSERT [{doc1},{doc2},{doc3}]
IN collection
UPDATE {} // when duplicate per document
Run Code Online (Sandbox Code Playgroud)
更新 1
SQL 看起来像这样:
INSERT INTO table(name, value)
VALUES('a', '1'), ('b', 2), ('c', 3)
ON DUPLICATE KEY UPDATE name=`value`
Run Code Online (Sandbox Code Playgroud)
谢谢。
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
Run Code Online (Sandbox Code Playgroud)
现在,如果您想执行批量更新插入,您可以运行以下 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
Run Code Online (Sandbox Code Playgroud)
AQL查询上面插入一个新Doc 4的文档和更新value属性Doc 2和Doc 3。
| 归档时间: |
|
| 查看次数: |
972 次 |
| 最近记录: |