如何在MongoDB中查找数组大小在一定范围内的文档?

时间:2015-05-08 12:58:35

标签: arrays mongodb

鉴于以下文件结构:

{
  _id : Mongo ID,
  data : [someData1, someData2, ..., someDataN]
}

我希望获取data大小介于ab之间的所有文档(严格正整数,考虑a < b始终为真)。
我首先考虑使用$size,但Mongo文档声明:

  

$size不接受值范围。要根据具有不同数量元素的字段选择文档,请创建一个计数器字段,在向字段添加元素时将其增加。

(强调我的)

如何在不使用计数器的情况下检索长度在dataa之间的b数组的所有文档?

相关但未解决:

  • answer建议使用计数器
  • question询问如何查询内部长度 并得到了很多答案
  • answer建议使用:{ 'data.' + b : { $exists : true } },但我不知道它有多可靠以及如何应用于范围
  • question有关如何查找阵列长度最小的文档

1 个答案:

答案 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=1b=3,您最终得到一个query对象,如下所示:

{
    "data.0" : {
        "$exists" : true
    },
    "data.3" : {
        "$exists" : false
    }
}

第一部分确保至少有a个元素,第二部分确保不超过b个元素。