MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongo Interroga un campo nidificato all'interno di un array.

Vorresti usare $elemMatch per questo.

{"genres": { "$elemMatch" :  {"name": "Shooter"} } }
// or
{"genres": { "$elemMatch" :  {"name": { "$in": ["Shooter"] } } } }

https://docs.mongodb.com/manual/reference/operator/ query/elemMatch/

Potresti anche usare la notazione del punto mongodb e funzionerà praticamente come faresti tranne:

{"genres.name": "Shooter"}
// or
{"genres.name": { "$in": ["Shooter"]}}

Mongodb sa come interpretarlo nel caso genres è un array. Tieni presente che la query della notazione del punto è leggermente ambigua, poiché corrisponderà anche al name proprietà nel caso in cui i genres la proprietà non è un array. Ad esempio, questo documento corrisponderebbe a:

{"genres": { "name": "Shooter" } }

In tutti i casi puoi indicizzare il name proprietà nei genres array e l'indice verrebbero usati per le ricerche.

db.collection.createIndex({'genres.name': 1})

https://docs.mongodb.com/manual/reference/ glossario/#termine-punto-notazione

https://docs.mongodb.com/manual/reference/operator/ interrogare/in/