Arangodb 在ArangoJS进行批量升级?

Arangodb 在ArangoJS进行批量升级?,arangodb,arangojs,Arangodb,Arangojs,我发现我可以.save(objects),如果密钥不存在,它会创建对象。我发现我可以.bulkUpdate(objects)来更新存在密钥的对象 我的问题是:如何进行批量升级?如果密钥存在,则更新它(合并),如果不存在,则创建它 有没有一种方法可以在不增加大量开销的情况下做到这一点 这样做可以接受吗 db.collection("threads").bulkUpdate(keyedThreads); db.collection("threads").save(keyedThreads); RE

我发现我可以
.save(objects)
,如果密钥不存在,它会创建对象。我发现我可以
.bulkUpdate(objects)
来更新存在密钥的对象

我的问题是:如何进行批量升级?如果密钥存在,则更新它(合并),如果不存在,则创建它

有没有一种方法可以在不增加大量开销的情况下做到这一点

这样做可以接受吗

db.collection("threads").bulkUpdate(keyedThreads);
db.collection("threads").save(keyedThreads);

REST Insert具有覆盖选项。这可能就是你想要的

如果没有,您需要在2017年6月9日使用AQL UPSERT.

(ArangoDB):

Upsert仅通过AQL提供。没有collection.upsert方法

(ArangoDB)补充说:

upsert的一个主要问题是访问旧数据。这可以很容易地在AQL中处理,但不能在对upsert端点的简单调用中处理。因此,我们决定反对这样的呼吁,而是在AQL中实施

看起来永远不会有
collection.bulkUpsert
的本机实现;但是,您可以使用AQL和函数创建自己的帮助器函数

类型脚本示例:

/**
*将文档的内容与给定的文档和
*(可选)返回包含文档元数据的数组。
*
*@param{string | ArangoDB.Collection}Collection-要使用的集合
*@param{Document[]}documents-要升级的文档列表
*@param opts?-可选地聚合结果{插入:编号,更新:编号}
*也看到https://www.arangodb.com/docs/stable/aql/operations-upsert.html
*/
导出异步函数bulkUpsert(
集合:字符串|文档集合,

documents:Array

如果我错了,请纠正我的错误,但这不会替换文档而不是合并它们吗?@lukepihetti你是对的。如果你不只是想将数据从应用程序同步到数据库,你需要编写一个使用UPSERT语句的AQL查询。没有UPSERT REST/文档处理程序。