在对象数组中查找具有两个特定 id 的所有文档。蒙古数据库

Joe*_*oel 4 mongodb nosql mongodb-query

您好,我有一个 mongodb find() 问题查询。我试图在同一个对象数组中找到具有两个特定 ID 的所有文档。

示例文档结构:

文档 1

{
    gameId:394028,
    people: [{
      id: 5,
      mapSide: 'left'
   },{
      id: 4,
      mapSide: 'right'
   },{
      id: 1,
      mapSide: 'right'
   },{
      id: 2,
      mapSide: 'left'
   }]
}
Run Code Online (Sandbox Code Playgroud)

文档 2

{
    gameId:394028,
    people: [{
      id: 7,
      mapSide: 'left'
   },{
      id: 9,
      mapSide: 'right'
   },{
      id: 4,
      mapSide: 'right'
   },{
      id: 1,
      mapSide: 'left'
   }]
}
Run Code Online (Sandbox Code Playgroud)

我将如何在同一个 people 数组中获取 id 为 5 和 4 的所有文档?我试过这个shell命令:

    db.COLLECTION.find({"people.id":5, "people.id":4}); //should return doc 1
Run Code Online (Sandbox Code Playgroud)

但是我还没有得到任何结果。我也打算仅在他们有不同的地图方面时才找到 id - 我试过这个:

    db.COLLECTION.find({
         people: {$elemMatch:{id:4, mapSide:"left"}, 
         people: {$elemMatch:{id:1, mapSide:"right"}
    },{
         people: {$elemMatch:{id:4, mapSide:"right"}, 
         people: {$elemMatch:{id:1, mapSide:"left"}
    }); //Should return doc 2, because doc 1 has both mapSide as 'right'
Run Code Online (Sandbox Code Playgroud)

如果我能回答这些问题中的任何一个,那就太好了!谢谢。

go-*_*leg 5

您可以使用以下查询来查找people数组同时包含元素 withid == 4和元素 with 的所有文档id == 5

db.COLLECTION.find( { $and : [ { 'people.id' : 4 }, { 'people.id' : 5 } ] } )
Run Code Online (Sandbox Code Playgroud)