Извлечь совпадения $ graphLookup в документы - PullRequest
0 голосов
/ 28 сентября 2018

Для контекста я использую MongoDB 3.6.4 и пытаюсь построить иерархическую схему для разрешений ACL, но я сведу проблему к минимуму и сохраню детали.

Скажем, у меня естьпростая коллекция C, где parents - это список ссылок на другие документы в C:

{
  _id: ObjectId
  parents: Array(ObjectId)
}

Если я выполняю агрегацию, например:

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

Iполучить данные типа:

{
  "_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 голосов
/ 28 сентября 2018

Вы можете попробовать добавить ниже этапы к запросу.

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