2014-10-15 2 views
0

Если это мои данные: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 & John. Как я могу просто получить Джона?

ответ

1

Используйте $ elemMatch указать все ограничения к одному элементу:

Owners.findOne({ 
    'pets': { 
     '$elemMatch' : { 
      'age': 7, 
      'type': 'dog' 
     } 
    } 
}); 
Смежные вопросы