如何使用MongoDB查询指定数值落在文档至少一个自定义区间内的文档
解决方案
你可以使用MongoDB的$elemMatch操作符实现该需求,该操作符的作用是匹配数组中至少存在一个同时满足所有指定查询条件的元素,刚好适配你要判断数值落在任意一个区间的场景。
对应的查询语句如下:
// 请将语句中的N替换为你需要查询的实际数值 db.collection.find({ "ranges": { $elemMatch: { "min": { $lte: N }, "max": { $gte: N } } } })
注意事项
如果不使用$elemMatch,直接按单区间的写法拼接两个条件:
// 错误写法,会返回不符合预期的结果 db.collection.find({ "ranges.min": { $lte: N }, "ranges.max": { $gte: N } })
这种写法的逻辑是「数组中存在任意一个元素满足min <= N,同时存在任意一个元素满足max >= N」,不需要两个条件作用在同一个区间元素上。比如N=25的场景下,文档A的ranges数组里有min:10 <=25,也有max:50 >=25,虽然25不在A的任何一个区间内,错误写法还是会把A返回,而$elemMatch就可以避免这种逻辑错误。
内容的提问来源于stack exchange,提问作者user3032481
相关产品推荐
相关产品推荐

