Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在MongoDB中查找数组大小在一定范围内的文档?_Arrays_Mongodb - Fatal编程技术网

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

Arrays 如何在MongoDB中查找数组大小在一定范围内的文档?,arrays,mongodb,Arrays,Mongodb,鉴于以下文件结构: { _id : Mongo ID, data : [someData1, someData2, ..., someDataN] } 我想得到所有的文件< 数据>代码>大小在 a > b>代码>(严格正整数,考虑 a 始终是真的)。 我最初考虑使用,但Mongo文档指出: $size不接受值的范围。若要根据具有不同元素数的字段选择文档,请创建一个计数器字段,当您向字段添加元素时,该字段将递增 (强调矿山) 如何在不使用计数器的情况下检索长度介于a和b之间的data

鉴于以下文件结构:

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

我想得到所有的文件< <代码>数据>代码>大小在<代码> a <代码> > <代码> b>代码>(严格正整数,考虑<代码> a 始终是真的)。 我最初考虑使用,但Mongo文档指出:

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

(强调矿山)

如何在不使用计数器的情况下检索长度介于
a
b
之间的
data
数组中的所有文档


相关但未解决的问题:

  • 这建议使用计数器
  • 这将询问如何查询内部长度 得到了很多答案
  • 这建议使用:
    {'data.+b:{$exists:true}}
    ,但我不知道它有多可靠,以及如何应用于某个范围
  • 这篇文章介绍了如何查找具有最小数组长度的文档

您可以使用
$exists
操作符方法,方法是在查询中包含多个术语,并以编程方式进行构建:

var startKey='数据'+(a-1);
var endKey='数据'.+b;
var query={};
查询[startKey]={$exists:true};
查询[endKey]={$exists:false};
db.test.find(查询);
因此,例如,对于
a=1
b=3
,您将得到一个
query
对象,该对象如下所示:

{
“数据0”:{
“$exists”:true
},
“数据3”:{
“$exists”:false
}
}

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

我担心,在做一些愚蠢的事情时,比如
data=[];数据[0]={};数据[10]={}
(你永远不知道)最后一个变量
data
可能会让我们在执行
“data.n”时得到不同的结果:{$exists:…
和a
$size
。经过一些测试,发现空元素中填充了
null
值,因此我可以确认您的答案的正确性以及它的了不起。感谢您提供的干净解决方案!