В MongoDB, предположим, что у нас есть коллекция items
со следующими данными выборки:Находить документы, имеющие специфические значения в поддокументами в MongoDB
[
{name: "A", locations: [{country: "USA"}, {country: "Germany"}]},
{name: "B", locations: [{country: "USA"}],
{name: "C", locations: [{country: "France"}, {country: "Germany"}]},
{name: "D", locations: [{country: "Germany"}]},
{name: "E", locations: [{country: "USA"}, {country: "UK"}]}
]
Как мы можем получить
name
поле всех документов Имея толькоcountry: "Germany"
вlocations
вложенный документ?Пример: Используя сбор образцов
items
выше, то выполнение выше запрос должен возвращать[{name: "D"}]
Как мы можем получить
name
поле всех документов сlocations
поддокумент не имеющиеcountry: France
илиcountry: "Germany"
(или оба) как элемент?Пример: Используя сбор образцов
items
выше, то выполнение выше запрос должен возвращать[{name: "B"}, {name: "E"}]
Я прочитал документацию и пробовал много вещей, и я в конечном итоге его обработки с использованием двух шаги. Выполнение запроса с помощью наиболее специфического запроса, с которым я столкнулся, затем фильтрацию ненужных документов путем циклического обращения к документам (массиву) программно. Я бы предпочел узнать, может ли любой из предыдущих запросов быть достигнут напрямую одним запросом.
Примечание: Документы/запросы - это только образцы, а документы/запросы, с которыми я имею дело, различны.
1-db.test.find ({ "места": [{ "страна": "Германия"}]}) – Disposer
Это будет работать, только если мы предположим, что «местоположения» будут содержать только один ключ/значение «страна:« Германия ». Если есть другие пары ключ/значение, это не сработает. – tria