有没有办法按特定值的出现次数过滤 mongo 数据库



例如,如果我有一个数据库,例如

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

有没有办法只取回那些与"数字"<4 并且有超过 2 个实例的条目?所以在这种情况下,只有那些带有"数字"== 1 的,因为有 3 个。

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

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

最新更新