2013-10-26 2 views
1

У меня есть коллекция ищет нечто вроде этого:Найти в поддокументах возвращающегося документ

{ 
    "colors": ["blue","white"], 
    "items": { 
    "old": { 
     "name": "test" 
    } 
    "current": { 
     "name": "new_test" 
    } 
    } 
}, 
{ 
    "colors": ["red","green"], 
    "items": { 
    "old": { 
     "name": "test2" 
    } 
    "current": { 
     "name": "new_test2" 
    } 
    } 
}, 

Можно ли использовать найти так:

db.collection.find({"items": { "old": { "name": "test" } } }) 

Так команда будет возвращать:

{ 
    "colors": ["blue","white"], 
    "items": { 
    "old": { 
     "name": "test" 
    } 
    "current": { 
     "name": "new_test" 
    } 
    } 
} 

Возможно ли это?

ответ

4

Да, вы можете использовать «dot notation», чтобы достичь в объект:

db.collection.find({"items.old.name": "test" }) 

Синтаксис запросов вы использовали также работает, но имеют различную семантику: Это будет соответствовать всему поддокументу равенства а не только одно поле. Например, следующий запрос также будет возвращать результат:

db.foo.find({"items.old": {"name" : "test"} }), 

но db.collection.find({"items": { "old": { "name": "test" } } }) не делает, потому что itemsтакже содержит current поле.

Смежные вопросы