Есть ли способ отфильтровать базу данных Монго по количеству вхождений определенного значения? - PullRequest
1 голос
/ 28 мая 2019

Например, если у меня есть база данных типа

Number OtherStuff
1      stuff
2      stuffalso
1      morestuff
1      otherstuff
2      stuff2
3      stuff3
4      stuff4

есть ли способ вернуть только те записи, которые соответствуют 'Number' <4, и существует более 2 экземпляров? Так что в этом случае только те, у кого 'Number' == 1, так как их 3. </p>

Что-то вроде db.find({Number: {$lt: 4}, somethingelsehere})

1 Ответ

1 голос
/ 28 мая 2019

Вы можете запустить $ match , чтобы проверить, меньше ли Number, чем 4, а затем запустить $ group , чтобы проверить, сколько экземпляров имеет каждая группа.Вы также можете запустить $ unwind и $ replaceRoot , чтобы вернуть исходную форму ваших данных:

db.col.aggregate([
    { $match: { Number: { $lt: 4 } } },
    {
        $group: {
            _id: "$Number",
            documents: { $push: "$$ROOT" },
            count: { $sum: 1 }
        }
    },
    {
        $match: { count: { $gt: 2 } }
    },
    {
        $unwind: "$documents"
    },
    {
        $replaceRoot: { newRoot: "$documents" }
    }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...