MongoDB使用$gte与$lte过滤时排除指定数值的实现方法(含多值排除场景)
MongoDB使用$gte与$lte过滤时排除指定数值的实现方法(含多值排除场景)
嗨,我来帮你搞定这个问题!你已经在用$gte和$lte做范围匹配了,要同时排除特定数值其实很简单,咱们分两种场景来聊:
一、排除单个数值
如果只是要排除某一个值(比如你说的55),可以用$ne(不等于)和范围条件组合起来。因为要同时满足「数值在10-100之间」和「不等于55」这两个要求,咱们可以直接把条件写在同一个字段的查询里,MongoDB会自动按逻辑与处理:
db.collection.aggregate([ { $match: { number: { $gte: 10, $lte: 100, $ne: 55 } } } ])
当然,如果你习惯用$and明确写出逻辑关系,也可以这么写,效果是一样的:
db.collection.aggregate([ { $match: { $and: [ { number: { $gte: 10, $lte: 100 } }, { number: { $ne: 55 } } ] } } ])
二、排除多个数值
要是你需要排除2个甚至更多数值(比如55、66、77),这时候用$nin(Not In,不在指定数组内)就最合适了。用法和上面类似,把要排除的数值放进数组里就行:
db.collection.aggregate([ { $match: { number: { $gte: 10, $lte: 100, $nin: [55, 66, 77] } } } ])
同样,用$and的写法也支持:
db.collection.aggregate([ { $match: { $and: [ { number: { $gte: 10, $lte: 100 } }, { number: { $nin: [55, 66, 77] } } ] } } ])
不管你要排除多少个值,只要把它们都加到$nin的数组里就好,非常灵活。
备注:内容来源于stack exchange,提问作者Zesshi
相关产品推荐
相关产品推荐

