Arangodb 插入多行并使用 UPSERT

Arangodb insert multiple rows and using UPSERT

如何使用 UPSERT 在 arangodb 中插入多行? 集合包含防止插入重复文档的唯一索引。 没有唯一索引的多重插入工作正常,但我如何处理具有唯一索引的多重插入中的 update/replace?

像这样:

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`

谢谢。

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

来自 ArangoDB 文档:

When using the UPDATE variant of the upsert operation, the found document will be partially updated, meaning only the attributes specified in updateExpression will be updated or added. When using the REPLACE variant of upsert, existing documents will be replaced with the contexts of updateExpression.

您可以使用 UPSERT update/replace/insert 多个记录,如下所示:

让我们首先使用 name 属性的唯一哈希索引将一些示例文档插入您的 collection

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 的值属性。