Как найти не в значениях в запросе mongodb - PullRequest
0 голосов
/ 09 января 2019

Здесь у меня n-количество документов, ниже приведены примеры документов.

{
    "_id" : "ABC",
    "languagesknow" : {
        "lng" : [
            "1",
            "2"
        ]

    }
},
{
    "_id" : "CDF",
    "languagesknow" : {
        "lng" : [
            "3",
            "4"
        ]

    }
}

Мой вопрос: предположим, я передам входные данные как один массив. Предположим, что в этом массиве я передаю 2 & 5 & 6 означает, что 5 & 6 нет внутри lng, поэтому вы хотите напечатать значения, как этого добиться?

1 Ответ

0 голосов
/ 09 января 2019

Вам нужен оператор $ setDifference , попробуйте:

db.collection.aggregate([
    {
        $match: {
            "languagesknow.lng": { $type: "array" }
        }
    },
    {
        $project: {
            languagesknow: {
                $setDifference: [ [ "2", "5", "6" ], "$languagesknow.lng" ]
            }
        }
    }
])

РЕДАКТИРОВАТЬ: вы можете поставить $match перед $setDifference, чтобы отфильтровать все документы, где languagesknow.lng не является массивом (используется оператор $ type ).

EDIT (2): если вы хотите получить один массив для всей коллекции, то вам нужно добавить $ group с $ unwind , чтобы собрать все языки в одном массиве, а затем запустите $setDifference, попробуйте:

db.collection.aggregate([
    {
        $match: {
            "languagesknow.lng": { $type: "array" }
        }
    },
    {
        $unwind: "$languagesknow.lng"
    },
    {
        $group: {
            _id: null,
            languagesknow: { $addToSet: "$languagesknow.lng" }
        }
    },
    {
        $project: {
            languagesknow: {
                $setDifference: [ [ "2", "5", "6" ], "$languagesknow" ]
            }
        }
    }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...