Я довольно долго боролся с очень простой функцией c и не мог найти хорошего решения в Интернете.
Моя проблема очень проста. У меня есть документы как таковые в моей базе данных:
// document 1
{
_id: "0000000000001",
name: "document 1 name",
document2s: [ "0000000000002" ] // array of ids of document2s
}
// document 2
{
_id: "0000000000002",
name: "document 2 name",
document3s: [ "0000000000003" ] // array of ids of document3s
}
// document 3
{
_id: "0000000000003",
name: "document 3 name",
}
Я хотел бы написать агрегат, чтобы получить такой результат:
{
_id: "0000000000001",
name: "document 1 name",
document2s: [
{
_id: "0000000000002",
name: "document 2 name",
document3s: [
{
_id: "0000000000003",
name: "document 3 name",
}
]
}
]
}
Агрегаты с поиском $ довольно просты но результат плоский (документ2 и документ3 будут на одном уровне в пределах документа1). Я бы хотел, чтобы объекты были вложены в том месте, которому они принадлежат. А это сложно. Мне удалось выполнить это для одного уровня вложенности (с помощью $ group), но для двух уровней вложенности (или более!) Я не могу заставить его работать.
Обратите внимание, что на каждом уровне , идентификаторы документов: массивы .
Любая помощь будет принята с благодарностью!