mongodb - MongoDB以数组作为输入查询下限/上限范围
问题描述
在 MongoDB 中,我有一个如下所示的集合:
{ low: 1, high: 5 },
{ low: 6, high: 15 },
{ low: 16, high 412 },
...
我输入的是一个整数数组:
[ 4, 16, ...]
我想找到集合中的所有文档,其值包含在低和高所描述的范围内。在此示例中,它将选择第一个和第三个文档。
我在这里找到了很多关于如何使用单个值作为输入进行过滤的问答,但找不到包含数组作为输入的问答。可能是我的搜索失败了,这已经得到了回答。
更新:我应该提到我在应用程序中构建此查询,而不是在 CLI 中运行它。鉴于这种灵活性,如果我$or
使用每个输入创建一个查询会怎样?就像是:
$or: [{
high: { $gte: 4 },
low: { $lte: 4 },
}, {
high: { $gte: 16 },
low: { $lte: 16 },
},
...
]
它可能是巨大的,并且在$or
.
解决方案
//working code from Mongo Shell CLI 4.2.6 on windows 10
//you can use forEach and loop through for comparison if a value exists between two numbers
> print("MongoDB",db.version());
MongoDB 4.2.6
> db.lhColl.find();
{ "_id" : ObjectId("5f889258f3b30cd04c8a78e5"), "low" : 1, "high" : 5 }
{ "_id" : ObjectId("5f889258f3b30cd04c8a78e6"), "low" : 6, "high" : 15 }
{ "_id" : ObjectId("5f889258f3b30cd04c8a78e7"), "low" : 16, "high" : 412 }
> var arrayInput = [4,16,500];
> var inputLength = arrayInput.length;
> db.lhColl.aggregate([
... {$match:{}}
... ]).forEach(function(doc){
... for (i=0; i<inputLength; i++){
... if (arrayInput[i]>=doc.low){
... if(arrayInput[i] <= doc.high)
... print("arrayInputs value match:",arrayInput[i]);
... }
... }
... });
arrayInputs value match: 4
arrayInputs value match: 16
推荐阅读
- python - 如何根据特定条件分配概率?
- vba - VBA宏在多个工作表中拆分数据?
- android - 检测双击通知
- python - TypeError('列表索引必须是整数,而不是str',)在Python中使用get()方法
- java - 使用 SQL 存储过程可以得到以下输出吗?或在代码本身内处理它?
- python - 如何在 python 中使用 print 输出''
- python - 使用python的OpenCV AttributeError
- gitlab - gitlab-ci ssh 连接失败
- javascript - 如何通过篡改猴子脚本修复网页的连续重新加载?
- apache - 无法加载 SiteMinder 代理配置对象