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

时间:2014-08-26 03:58:21

标签: mongodb mongodb-query nosql

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

示例文档结构:

doc 1

{
    gameId:394028,
    people: [{
      id: 5,
      mapSide: 'left'
   },{
      id: 4,
      mapSide: 'right'
   },{
      id: 1,
      mapSide: 'right'
   },{
      id: 2,
      mapSide: 'left'
   }]
}

doc 2

{
    gameId:394028,
    people: [{
      id: 7,
      mapSide: 'left'
   },{
      id: 9,
      mapSide: 'right'
   },{
      id: 4,
      mapSide: 'right'
   },{
      id: 1,
      mapSide: 'left'
   }]
}

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

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

但是我还没有得到任何结果。我也打算只在他们有不同的地图方面找到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'

如果我可以帮忙解决其中任何一个问题,那就太棒了!感谢。

1 个答案:

答案 0 :(得分:4)

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

db.COLLECTION.find( { $and : [ { 'people.id' : 4 }, { 'people.id' : 5 } ] } )