MongoDB - объединение 2 коллекций вместе для соответствия дочернему элементу - PullRequest
0 голосов
/ 12 июля 2020

Я изо всех сил пытаюсь создать запрос с использованием Mon go DB, который объединяет 2 коллекции вместе, чтобы соответствовать дочернему элементу.

В конечном итоге я пытаюсь найти все записи, соответствующие _id в От collection_A до po_data.vendor._id в collection_C. Чтобы найти записи, вам сначала нужно присоединиться к collection_B.

Как мне вернуть все записи, соответствующие _id в collection_A на po_data.vendor._id в `collection_ C.

Запрос смотрит в collection_A и возвращает следующую запись:

{
    "_id" : ObjectId("5e80f762189577230c65d3cb"),

}

Первая запись, к которой я присоединяюсь, - collection_B:

{
    "_id" : ObjectId("5efd0984be81418cc59f3ff9"),
    "activeRecord" : ObjectId("5efd0984be81418cc59f3ff8"),
    "revisions" : [ 
        ObjectId("5efd0984be81418cc59f3ff8")
    ]
} 

Это запишите, что его соединение с - collection_C:

{
    "_id" : ObjectId("5efd0984be81418cc59f3ffa"),
    "revision_uLID" : ObjectId("5efd0984be81418cc59f3ff8"),
    "parentRecord_uLID" : ObjectId("5efd0984be81418cc59f3ff9"),
    "po_data" : {
        "vendor" : {
            "_id" : "5e80f762189577230c65d3cb",
        }
}

Имена activeRecord и revision_uLID соединяются друг с другом.

Пока что я предпринял попытку со следующим , однако, похоже, он не работает.

const result = await findr.aggregate(
        [
            {
                $lookup: {
                    from: "collection_B",
                    let: {
                        "activeRecord": "$activeRecord",
                        '_id': '$_id'
                    },
                    pipeline: [{
                            $match: {
                                $expr: {
                                    $eq: ["$activeRecord", "$$activeRecord"]
                                }
                            }
                        },
                        {
                            $lookup: {
                                from: "collection_C",

                                "pipeline": [{
                                    "$match": {
                                        "$expr": {
                                            "$eq": ["$revision_uLID", "$$activeRecord"]
                                        }
                                    }
                                }]
                            }
                        },
                    ],
                    as: "vendors"
                }
            },
            {
                $project: {
                    _id: 1,
                    vendors: 1

                }
            },

        ]).toArray()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...