mongoDB находит документы на основе условия со значением из связанного документа другой коллекции - PullRequest
1 голос
/ 18 июня 2019

У меня есть коллекции следующей структуры:

объекты:

[{"type": "someTypeOne", "menuId": 1},
{"type": "someTypeTwo", "menuId": 1},
{"type": "someTypeOne", "menuId": 2}]

меню:

[{"id":1, "type": "someTypeOne"},
{"id":2, "type": "someTypeOne"}]

Мне нужно найти все объекты, где свойство "type" не соответствует его меню "type".В этом случае желаемый результат будет:

[{"type": "someTypeTwo", "menuId": 1}]

Я думаю, что я должен использовать агрегацию для этого, и я в настоящее время возиться с ним, но я не смог сформулировать рабочий запрос до сих пор,Спасибо

1 Ответ

2 голосов
/ 18 июня 2019

Вы можете попробовать выполнить агрегацию ниже:

db.objects.aggregate([
    {
        $lookup: {
            from: "menus",
            localField: "menuId",
            foreignField: "id",
            as: "menu"
        }
    },
    {
        $unwind: "$menu"
    },
    {
        $match: {
            $expr: {
                $ne: [ "$menu.type", "$type" ]
            }
        }
    },
    {
        $project: {
            menu: 0
        }
    }
])

$ lookup позволяет получать данные из обеих коллекций, затем вы можете запустить $ unwind на menu массив для получения одного меню на документ, и вы можете применить условие неравенства, используя $ match и $ expr

Mongo Playground

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