如何在MongoDB的范围内找到具有数组大小的文档



给定以下文档结构:

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

我想获取data大小在ab之间的所有文档(严格的正整数,考虑a < b始终是正确的)。
我首先考虑使用$size,但Mongo Doc指出:

$size不接受值范围。要选择基于具有不同元素数量的字段的文档,请创建 counter Field 在将元素添加到字段时会增加。

(强调我的)

如何在ab之间使用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=1b=3,您最终会得到一个看起来像:

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

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

最新更新