Arangodb 插入多行并使用 UPSERT

Ata*_*ini 1 arangodb aql

如何使用 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)

谢谢。

Pet*_*pin 5

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

来自 ArangoDB 文档:

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

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

让我们首先将一些示例文档插入您collectionname属性的唯一哈希索引中:

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 2Doc 3