Добавить результат поиска mon goose $ во вложенные документы - PullRequest
0 голосов
/ 18 июня 2020

Я довольно долго боролся с очень простой функцией 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), но для двух уровней вложенности (или более!) Я не могу заставить его работать.

Обратите внимание, что на каждом уровне , идентификаторы документов: массивы .

Любая помощь будет принята с благодарностью!

...