MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mongo Interroge un champ imbriqué dans un tableau.

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/