【问题标题】:insert and return document in a single AQL query在单个 AQL 查询中插入和返回文档
【发布时间】:2015-02-08 06:20:34
【问题描述】:

当我使用 AQL 将文档插入到集合中时,它会返回一个空列表。

arangosh [test]> db._query('INSERT @document INTO vertices', {document: {name: "bar"}}).toArray()
[ ]

有没有办法在单个 AQL 查询中插入文档并取回完整的文档?

我希望得到的是:

{
  "_id": "vertices/641272433780",
  "_key": "641272433780",
  "_rev": "641272433780",
  "name": "bar"
}

【问题讨论】:

  • 我们目前正在处理此问题(从 AQL 数据修改操作返回整个文档),但该功能尚未完成。有新闻我可以在这里发帖。
  • 很高兴听到!是否有计划允许在子查询中进行数据修改操作?
  • 暂时没有,因为这需要对 AQL 进行大量更改。

标签: arangodb aql


【解决方案1】:

从 ArangoDB 2.4 开始,这是可能的。返回创建的文档,原始查询

INSERT @document INTO vertices

必须改成

INSERT @document INTO vertices LET result = NEW RETURN result

这也适用于多文档 INSERT 以及 UPDATE/REPLACE 和 REMOVE。 2.4 documentation 中的以下引号描述了语法:

要从数据修改查询返回文档,INSERT、REMOVE、UPDATE 或 REPLACE 语句必须紧跟 LET 语句,该语句将伪值 NEW 或 OLD 分配给用户定义的变量。 LET 语句后面必须跟 RETURN 语句,返回由 LET 引入的变量。

NEW 指插入或修改的文档版本,OLD 指更新或删除之前的文档版本。 INSERT 语句只能引用 NEW 伪值,而 REMOVE 操作只能引用 OLD。 UPDATE 和 REPLACE 都可以引用。

【讨论】:

  • 也适用于 upsert
【解决方案2】:

一旦实现了该功能,它将如下所示:

INSERT expression IN|INTO collection [ OPTIONS expression ] WITH NEW INTO variable RETURN variable;

REMOVE expression IN|INTO collection [ OPTIONS expression ] WITH OLD INTO variable RETURN variable;

UPDATE expression IN|INTO collection [ OPTIONS expression ] WITH OLD|NEW INTO variable RETURN variable
UPDATE expression WITH expression IN|INTO collection [ OPTIONS expression ] WITH OLD|NEW INTO variable RETURN variable

`

【讨论】:

猜你喜欢
  • 2018-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-07
  • 2021-10-03
相关资源
最近更新 更多