Vous voudriez utiliser $elemMatch pour cela.
{"genres": { "$elemMatch" : {"name": "Shooter"} } }
// or
{"genres": { "$elemMatch" : {"name": { "$in": ["Shooter"] } } } }
https://docs.mongodb.com/manual/reference/operator/ requête/elemMatch/
Vous pouvez également utiliser la notation par points mongodb et cela fonctionnera à peu près comme vous le feriez, sauf :
{"genres.name": "Shooter"}
// or
{"genres.name": { "$in": ["Shooter"]}}
Mongodb sait comment interpréter cela au cas où genres est un tableau. Gardez simplement à l'esprit que la requête en notation par points est légèrement ambiguë, car elle correspondra également au name propriété au cas où les genres propriété n'est pas un tableau. Par exemple, ce document correspondrait :
{"genres": { "name": "Shooter" } }
Dans tous les cas vous pouvez indexer le name propriété dans les genres tableau et l'index serait utilisé pour les recherches.
db.collection.createIndex({'genres.name': 1})
https://docs.mongodb.com/manual/reference/ glossaire/#term-dot-notation
https://docs.mongodb.com/manual/reference/operator/ requête/dans/