【问题标题】:Get array of object from AQL从 AQL 获取对象数组
【发布时间】:2018-09-11 18:44:52
【问题描述】:

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

查询:

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

我想要这个结果...

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

...以数组的形式:

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

【问题讨论】:

  • 你可以循环遍历对象键并将它们放入一个新数组中,以防这个库没有你需要的开箱即用的东西。
  • Object.values({ "0": {"id": 1}, "1": {"id":2}}) 将返回 [{"id": 1}, {"id":2}] 但从未使用过 arango 我怀疑 api 有更清洁的方法

标签: javascript arangodb


【解决方案1】:

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

如果你只想返回特定的属性,你可以在查询的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();

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

【讨论】:

    猜你喜欢
    • 2021-10-13
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多