将$ graphLookup匹配项提取到文档中

时间:2018-09-27 21:00:34

标签: mongodb mongodb-query aggregation-framework

对于上下文,我正在使用MongoDB 3.6.4,并且尝试为ACL权限构建分层架构,但是我将把问题归结为一个问题并保存详细信息。

说我有一个简单的集合C,其中parentsC中其他文档的引用列表:

{
  _id: ObjectId
  parents: Array(ObjectId)
}

如果我进行以下汇总:

[
  {
    $match: {_id: ObjectId("f00...")}
  },
  {
    $graphLookup: {
      from: "C",
      startWith: "$parents",
      connectFromField: "parents",
      connectToField: "_id",
      as: "graph"
    }
  }
]

我得到如下数据:

{
  "_id": ObjectId("f00..."),
  "parents": [ObjectId("f01..."), ObjectId("f02..."), ...],
  "graph": [<doc1>, <doc2>, <doc3>, ...]
}

是否可以将graph项拆分为文档?例如来自上一个输出示例:

{
  "_id": ObjectId("f00..."),
  "parents": [ObjectId("f01..."), ObjectId("f02..."), ...]
}
<doc1>
<doc2>
<doc3>

1 个答案:

答案 0 :(得分:1)

您可以尝试添加以下阶段进行查询。

[
  {"$project":{"data":{"$concatArrays":[["$$ROOT"],"$graph"]}}},
  {"$unwind":"$data"},
  {"$project":{"data.graph":0}},
  {"$replaceRoot":{"newRoot":"$data"}}
]