У меня есть следующая коллекция
[
{
"_id": "1",
"name": "A",
"parent": "",
},
{
"_id": "2",
"name": "B",
"parent": "A",
},
{
"_id": "3",
"name": "C",
"parent": "B",
},
{
"_id": "4",
"name": "D",
"parent": "C",
}
]
Я пытаюсь получить ответ, подобный этому:
[
{
"_id": "4",
"name": "D",
"parent": "C"
},
{
"_id": "3",
"name": "C",
"parent": "B"
},
{
"_id": "2",
"name": "B",
"parent": "A"
},
{
"_id": "1",
"name": "A",
"parent": ""
}
]
Я пробовал несколько вещей, но застрял, последняя попытка :
db.collection.aggregate([
{
"$match": {
"name": "D"
}
},
{
$graphLookup: {
from: "collection",
startWith: "$parent",
connectFromField: "parent",
connectToField: "name",
as: "chain"
}
},
{
$facet: {
"chain": [
{
$project: {
"chain": 1,
"_id": 0
}
},
],
"root": [
{
$project: {
"chain": 0
}
},
]
},
},
{
$unwind: "$chain"
},
{
$unwind: "$root"
}
])
Результат от моей попытки:
[
{
"chain": {
"chain": [
{
"_id": "1",
"name": "A",
"parent": ""
},
{
"_id": "3",
"name": "C",
"parent": "B"
},
{
"_id": "2",
"name": "B",
"parent": "A"
}
]
},
"root": {
"_id": "4",
"name": "D",
"parent": "C"
}
}
]
Я хотел бы pu sh этот элемент "root" в массиве цепочек и сделать этот массив верхний результат, а затем сортировать его. В моем реальном случае использования "parent" и "name" - это просто некоторые идентификаторы, поэтому я не могу просто отсортировать по алфавиту (я бы назвал это по номеру java, чтобы потом можно было выполнить сортировку там, если это невозможно из mon go).
Я пытался использовать $ pu sh в проекции для их объединения, но согласно документации, которая не работает, $ pu sh работает только в группе $, если Я понял это правильно.