鉴于以下文件结构:
{
_id : Mongo ID,
data : [someData1, someData2, ..., someDataN]
}
我希望获取data
大小介于a
和b
之间的所有文档(严格正整数,考虑a < b
始终为真)。
我首先考虑使用$size
,但Mongo文档声明:
$size
不接受值范围。要根据具有不同数量元素的字段选择文档,请创建一个计数器字段,在向字段添加元素时将其增加。
(强调我的)
如何在不使用计数器的情况下检索长度在data
和a
之间的b
数组的所有文档?
相关但未解决:
答案 0 :(得分:3)
您可以使用$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
个元素。