Бихте искали да използвате $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/ речник/#term-dot-notation
https://docs.mongodb.com/manual/reference/operator/ query/in/