2016-09-19 4 views
2

Имея документ в коллекции test следующим образом:MongoDB запроса вложенных полей документа одновременно

{a:2, list:[{lang:"en", value:"Mother"}, {lang:"de", value:"Mutter"}] } 

Когда я запрашиваю:

db.test.find({"list.lang":"de", "list.value": "Mother" }) 

Я ожидаю получить ничего, но по причине того, что существует документ 2 вложенных записей, которые удовлетворяют общему состоянию MongoDB разрешает {a:2}

Как исправить запрос для извлечения только документов, где оба внутренних f ields одновременно удовлетворяет заданному условию?

+2

Я могу думать о запросе, который использует '$ all' как' db.test.find ({ "список": { "$ all": [{"lang": "de", "value": "Mother"}] } }) ' – chridam

+2

Что относительно [$ elemMatch]/reference/operator/query/elemMatch /) 'db.test.find ({" list ": {" $ elemMatc h ": {" lang ":" de "," value ":" Mother "}}})' –

ответ

4

Использование $elemMatch:

db.test.find({ "list": { "$elemMatch": {"lang":"de", "value": "Mother" } } }) 

Использование $all:

db.test.find({ "list": { "$all": [{"lang":"de", "value": "Mother" }] } }) 
+0

Благодарим вас за ответ. Какие из этих случаев используют индексы? – Dewfy

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