MongoDB агрегирует $ lookup для возврата непревзойденных элементов из основной коллекции - PullRequest
1 голос
/ 26 апреля 2019

Я хотел бы получить непревзойденные данные из коллекции USERS.Здесь у меня есть две коллекции 1) USERS, 2) COMPANY. Я могу получить сопоставленные данные из обоих USERS, используя функцию агрегирования.но в этом случае мне нужны данные из таблицы USERS, которые не присвоены компании.

таблица USERS

{
 _id: "AAA",
 fullName:"John Papa"
},
{
_id: "BBB",
fullName:"Robin Son"
}

таблица COMPANY

{
 _id: "1sd1s",
 Name:"Lumbar Company"
 User:"AAA"
},
{
 _id: "23s1dfs3",
 Name:"Patricia"
 User:"AAA"
}

1 Ответ

1 голос
/ 26 апреля 2019

$ lookup работает как LEFT OUTER JOIN, поэтому он удалит пустой массив при отсутствии совпадений. Тогда вы можете использовать $ size , чтобы получить только пустые массивы:

db.users.aggregate([
    {
        $lookup: {
            from: "company",
            localField: "_id",
            foreignField: "User",
            as: "companies"
        }
    },
    {
        $match: {
            $expr: {
                $eq: [ { "$size": "$companies" }, 0 ]
            }
        }
    }
])

Детская площадка Монго

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