Arrays MongoDB过滤对象的子数组
文档结构有一个Arrays MongoDB过滤对象的子数组,arrays,mongodb,Arrays,Mongodb,文档结构有一个round集合,其中嵌入了holes对象的array,每个hole都进行了播放/评分 结构如下所示(有更多字段,但本文总结): 在Atlas web UI中,它显示为(注意,在这一轮高尔夫中有9个洞-为简洁起见,限制为3个): < P> >我想找出在2轮高尔夫球比赛中有“ HoelRox< /代码>,或更少,在他们的高尔夫球赛中的某个地方(比方3或更好的小鸟)。 作为MongoDB和NoSQL构造的新手,我一直坚持这一点。通过阅读聚合管道框架,我尝试将我需要的阶段分解为: 按co
round
集合,其中嵌入了holes
对象的array
,每个hole都进行了播放/评分
结构如下所示(有更多字段,但本文总结):
在Atlas web UI中,它显示为(注意,在这一轮高尔夫中有9个洞-为简洁起见,限制为3个):
< P> >我想找出在2轮高尔夫球比赛中有“<代码> HoelRox< /代码>,或更少,在他们的高尔夫球赛中的某个地方(比方3或更好的小鸟)。
作为MongoDB和NoSQL构造的新手,我一直坚持这一点。通过阅读聚合管道
框架,我尝试将我需要的阶段分解为:
comp.id
和comp.roundNo
孔
对象数组中的任何孔过滤此结果{
"comp.id": ObjectId("607019361c071256e4f0d0d5"),
"comp.roundNo": 2
}
以及:
但我有两个问题:
- 第二个过滤器查询,我硬编码了数组索引以获得这个值。我需要搜索与此
&&comp.id
comp.roundNo
- 我如何组合这些?我认为这就是聚合的作用,以及整个数组的枚举(如上所述)
$lte
搜索,如下所示:
db.collection.find({ "holes.holeGross": { $lte: 2 } })
您只需在属性路径中指定数组索引,如0
,即可搜索数组的每个元素
这不会返回任何结果。如果我将其修改为
{“holes.2.holeGross”:{$lte:2}}
,它将返回我知道我输入了2的holeGross for.works fine in的1轮。也许您的文档结构不同?如果不同,你能更新结构并共享链接,让我再看一眼吗?
{ "holes.0.holeGross": 2 }
db.collection.find({ "holes.holeGross": { $lte: 2 } })