MongoDB |基于多个属性查询对象数组

时间:2014-10-15 01:13:03

标签: mongodb

如果这是我的数据:

{
  owner: 'John',
  pets:[
    {
      name: 'Oscar',
      age: 7,
      type: 'dog'
    },{
      name: 'Oscar II',
      age: 3,
      type: 'dog'
    }
  ]
},{
  owner: 'Sally',
  pets:[
    {
      name: 'Spot',
      age: 7,
      type: 'cat'
    },{
      name: 'Mister Dog',
      age: 3,
      type: 'dog'
    }
  ]
}

如何构建查询以获得每只拥有7只狗的所有者。

我试过了:

Owners.findOne({
  'pets.age': 7,
  'pets.type': 'dog'
});

但这会让每个拥有7岁或宠物的宠物的主人归还。在上述数据的情况下,它返回Sally&约翰。我怎么才能得到约翰?

1 个答案:

答案 0 :(得分:1)

使用 $ elemMatch 指定同一元素的所有约束:

Owners.findOne({
  'pets': {
      '$elemMatch' : {
          'age': 7,
          'type': 'dog'
       }
   }
});