有没有一种方法可以通过特定值的出现次数来过滤mongo数据库?

时间:2019-05-28 19:32:12

标签: mongodb filter mongodb-query

例如,如果我有一个类似的数据库

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

是否有办法只取回那些匹配'Number'<4并且有2个以上实例的条目?因此,在这种情况下,只有'Number'== 1的那些,因为它们中有3个。

类似db.find({Number: {$lt: 4}, somethingelsehere})

1 个答案:

答案 0 :(得分:1)

您可以运行$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" }
    }
])