给定以下文档结构:
{
_id : Mongo ID,
data : [someData1, someData2, ..., someDataN]
}
我想获取data
大小在a
和b
之间的所有文档(严格的正整数,考虑a < b
始终是正确的)。
我首先考虑使用$size
,但Mongo Doc指出:
$size
不接受值范围。要选择基于具有不同元素数量的字段的文档,请创建 counter Field 在将元素添加到字段时会增加。
(强调我的)
如何在a
和b
之间使用data
阵列检索所有文档,而无需使用计数器?
相关但没有解决:
- 建议使用计数器的答案
- 这个问题询问如何查询内部长度并得到了许多答案
- 建议使用的答案:
{ 'data.' + b : { $exists : true } }
,但我不知道它是多么可靠以及如何应用于范围 - 这个有关如何找到最小数组长度文档的问题
您可以通过在查询中包含多个术语并以编程方式构建$exists
操作员方法:
var startKey = 'data.' + (a-1);
var endKey = 'data.' + b;
var query = {};
query[startKey] = {$exists: true};
query[endKey] = {$exists: false};
db.test.find(query);
对于a=1
和b=3
,您最终会得到一个看起来像:
query
对象 {
"data.0" : {
"$exists" : true
},
"data.3" : {
"$exists" : false
}
}
第一部分确保至少有a
元素,第二部分确保不超过b
元素。