首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用UPSERT插入多行

使用UPSERT插入多行
EN

Stack Overflow用户
提问于 2019-03-10 15:40:03
回答 1查看 1.7K关注 0票数 1

如何使用UPSERT将多行插入到arangodb中?集合包含防止插入重复文档的唯一索引。在没有唯一索引的情况下,多个insert工作得很好,但是如何用唯一索引处理多个insert中的更新/替换呢?

就像这样:

代码语言:javascript
运行
复制
INSERT [{doc1},{doc2},{doc3}]
IN collection

UPDATE {} // when duplicate per document

更新1

SQL如下所示:

代码语言:javascript
运行
复制
INSERT INTO table(name, value)
VALUES('a', '1'), ('b', 2), ('c', 3)

ON DUPLICATE KEY UPDATE name=`value`

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-10 16:01:11

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

来自ArangoDB文档:

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

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

让我们首先使用collection属性的惟一散列索引将几个示例文档插入到name中:

代码语言:javascript
运行
复制
FOR doc in [
    { "name": "Doc 1", "value": 1 }, 
    { "name": "Doc 2", "value": 1 }, 
    { "name": "Doc 3", "value": 1 }]

INSERT doc IN collection

现在,如果要执行批处理重新插入,可以运行以下AQL:

代码语言:javascript
运行
复制
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的value属性。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55089367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档