Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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,文档结构有一个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
  • 使用
    对象数组中的任何孔过滤此结果
  • 也许我的做法是错误的,应该以不同的方式过滤或构建这个管道吗

    到目前为止,使用Atlas web UI,我可以分别应用以下过滤器:

    {
      "comp.id": ObjectId("607019361c071256e4f0d0d5"),
      "comp.roundNo": 2
    }
    
    以及:

    但我有两个问题:

    • 第二个过滤器查询,我硬编码了数组索引以获得这个值。我需要搜索与此
      comp.id
      &&
      comp.roundNo
    • 我如何组合这些?我认为这就是聚合的作用,以及整个数组的枚举(如上所述)
    我特别注意到,这是第二个查询中额外的“.0.”部分,我没有从其他各种在线帖子中看到它试图做同样的事情。我的数据结构不正确吗?我是否需要[0]…[17]个对象来打一轮18洞的高尔夫

    我想在他们的高尔夫回合中,找到一个2洞或更少洞的球员

    如果这就是目标,在holes数组中进行简单的
    $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  } })