У меня есть документ со следующей структурой: {_id: 'fkwjefioew', genres: [{_id: 'fewkjfewf', 'name': "Shooter"}, {...}, ...]}
Мне нужно иметь возможность запрашивать с помощью mongo's $ in, чтобы узнать, имеет ли документ имя жанра переданного параметра. Например, если я передал запрос «Shooter» в запрос, мне нужны все документы, в которых один из объектов внутри этого документа генерирует массив, имеет имя «Shooter». Каким будет самый простой способ достичь этого? Благодаря!Mongo Запросить вложенное поле внутри массива.
ответ
Для этого вам необходимо использовать $elemMatch
.
{"genres": { "$elemMatch" : {"name": "Shooter"} } }
// or
{"genres": { "$elemMatch" : {"name": { "$in": ["Shooter"] } } } }
https://docs.mongodb.com/manual/reference/operator/query/elemMatch/
Вы также можете использовать MongoDB точечную нотацию, и это будет очень много работы, как вы бы за исключением:
{"genres.name": "Shooter"}
// or
{"genres.name": { "$in": ["Shooter"]}}
MongoDB знает, как интерпретировать это в случае genres
является массивом , Просто имейте в виду, что запрос нотации точки немного неоднозначен, так как он также будет соответствовать свойству name
в случае, если свойство genres
не является массивом. Например, этот документ будет соответствовать:
{"genres": { "name": "Shooter" } }
Во всех случаях вы можете индексировать name
свойство в genres
массива и индекс будет использоваться для поиска.
db.collection.createIndex({'genres.name': 1})
https://docs.mongodb.com/manual/reference/glossary/#term-dot-notation
https://docs.mongodb.com/manual/reference/operator/query/in/
- 1. как запросить MongoDB, используя поле, которое находится внутри массива объектов
- 2. Vue.js смотреть вложенное свойство внутри массива
- 3. Вставить поле с размером массива в mongo
- 4. Elasticsearch получить вложенное поле
- 5. Logstash создать вложенное поле
- 6. Вложенное поле restangular patch
- 7. Mongo: запрос для объекта внутри массива
- 8. Mongo push to array внутри массива
- 9. Запросить одно поле, равное другому полю массива?
- 10. mongo - как запросить вложенный json
- 11. Spark: Mongo-Hadoop как запросить
- 12. Mongo C#: Поле массива содержит элемент из заданного массива
- 13. Как запросить вложенное свойство от родительского объекта
- 14. Вложенное поле запроса с поддержкой индексов
- 15. Заполнение поле массива внутри структуры
- 16. CakePHP Найти поле внутри массива
- 17. вложенное поле в Solr 5.2
- 18. mysql update вложенное одно поле
- 19. Скрыть вложенное поле из результата
- 20. RoR: Вложенное поле в форме
- 21. Pyspark создавая вложенное поле перегородки
- 22. Вложенное текстовое поле ввода jquery
- 23. Джексон XML: вложенное поле десериализация
- 24. Как запросить пустую строку в PHP Mongo?
- 25. Ограничение массива Mongo
- 26. Создайте вложенное меню из массива
- 27. Вложенное понимание массива в Julia
- 28. Запросить поддокументы поддокумента/списка в Mongo
- 29. Как запросить словарь в Mongo Document?
- 30. Запросить несколько типов документов Spring Mongo
Этого ответ является правильным для этого конкретного случая, но учтите, что вы можете получить неожиданное поведение, если вы попытаетесь запросить несколько полей одновременно. Если вы это делаете, $ elemMatch предпочтительнее по причинам, указанным в этом ответе: https://stackoverflow.com/questions/18335248/dot-notation-vs-elemmatch –
@ АлександрКузьмин Thx за то, что указал, что Александр, я добавил ответ чтобы отразить ваши отзывы. –