Arangodb插入多行并使用UPSERT

Arangodb插入多行并使用UPSERT,arangodb,aql,Arangodb,Aql,如何使用UPSERT在arangodb中插入多行? 集合包含防止插入重复文档的唯一索引。 如果没有唯一索引,多个插入可以正常工作,但如何使用唯一索引处理多个插入中的更新/替换 像这样: INSERT [{doc1},{doc2},{doc3}] IN collection UPDATE {} // when duplicate per document INSERT INTO table(name, value) VALUES('a', '1'), ('b', 2), ('c', 3) O

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

像这样:

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

UPDATE {} // when duplicate per document
INSERT INTO table(name, value)
VALUES('a', '1'), ('b', 2), ('c', 3)

ON DUPLICATE KEY UPDATE name=`value`

更新1

SQL语句如下所示:

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

UPDATE {} // when duplicate per document
INSERT INTO table(name, value)
VALUES('a', '1'), ('b', 2), ('c', 3)

ON DUPLICATE KEY UPDATE name=`value`

谢谢。

ArangoDB支持UPSERT操作:

来自ArangoDB文档:

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

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

首先,让我们使用
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 2
Doc 3
的值属性,ArangoDB支持UPSERT操作:

来自ArangoDB文档:

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

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

首先,让我们使用
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 2
Doc 3
的值属性。您是否尝试过使用ArangoDB文档中描述的UPSERT?有什么具体问题吗?您可以添加更多关于您使用了什么类型的查询以及出现了什么错误的详细信息吗?如果使用单行插入,没有问题,我将尝试使用UPSERT和多行插入。作为讨论中的示例代码,如果我使用sql,它可能如下所示:`在表(名称、值)中插入重复键上的值('a','1'),('b',2),('c',4')UPDATE name=“value”`您是否尝试过使用ArangoDB文档中描述的UPSERT?有什么具体问题吗?您可以添加更多关于您使用了什么类型的查询以及出现了什么错误的详细信息吗?如果使用单行插入,没有问题,我将尝试使用UPSERT和多行插入。作为讨论中的示例代码,如果我使用sql,它可能看起来是这样的:`INSERT INTO table(name,value)VALUES('a','1'),('b',2),('c',4)ON DUPLICATE KEY UPDATE name=“value”`感谢您的回复,arangodb upsert documnet是关于单行插入的。如果我尝试批量插入,那么必须在每次插入时重复upsert
upsert{}insert{}UPDATE{}
,为了防止多次调用upsert,我必须批量插入。upsert也可以进行批量处理。请检查我上面更新的答案。谢谢Peter,这是实现我期望结果的正确方法。感谢您的回复,arangodb upsert documnet是关于单行插入的。如果我尝试批量插入,那么必须在每次插入时重复upsert
upsert{}insert{}UPDATE{}
,为了防止多次调用upsert,我必须批量插入。upsert也可以进行批量处理。请检查我上面更新的答案。谢谢Peter,这是实现我期望结果的正确方法。