从AQL获取对象数组

时间:2018-09-11 18:44:52

标签: javascript arangodb

我想要一个结果作为AQL中的对象数组。

查询:

db._query(aql`FOR doc IN ${collection} RETURN doc`).toArray();

我想得到这个结果...

{ "0": {"id": 1}, "1": {"id":2} }

...以数组的形式:

[{"id": 1}, {"id":2}]

1 个答案:

答案 0 :(得分:4)

您当前正在使用的查询正在将具有所有属性的集合中的所有文档作为数组返回。

如果您只想返回特定的属性,则可以在查询的RETURN语句中引用它们,例如

db._query(aql`FOR doc IN ${collection} RETURN doc.id`).toArray();

上面的查询将返回仅包含id值的数组,因此可能也不是您想要的。

如果您想返回一些属性和它们的值,可以使用以下解决方案:

在RETURN部分中明确命名属性

db._query(aql`FOR doc IN ${collection} RETURN { id: doc.id }`).toArray();

使用AQL KEEP功能

db._query(aql`FOR doc IN ${collection} RETURN KEEP(doc, ["id"])`).toArray();

如果有多个属性要返回,则后一种方法将节省键入内容。在这种情况下,您只需要将它们添加到KEEP的第二个参数中即可。

如果问题更多地在于“如何排除某些属性以免返回”,那么还有UNSET AQL函数:

db._query(aql`FOR doc IN ${collection} RETURN UNSET(doc, ["_key", "_rev", "_id"])`).toArray();

这种方法将返回没有提到的属性的文档。