MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Mongo Consulta um campo aninhado em uma matriz.


Você gostaria de usar $elemMatch por esta.
{"genres": { "$elemMatch" :  {"name": "Shooter"} } }
// or
{"genres": { "$elemMatch" :  {"name": { "$in": ["Shooter"] } } } }

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

Você também pode usar a notação de ponto mongodb e funcionará como você, exceto:
{"genres.name": "Shooter"}
// or
{"genres.name": { "$in": ["Shooter"]}}

O Mongodb sabe como interpretar isso no caso de genres é uma matriz. Lembre-se de que a consulta de notação de ponto é um pouco ambígua, pois também corresponderá ao name propriedade caso os genres propriedade não é uma matriz. Por exemplo, este documento corresponderia:
{"genres": { "name": "Shooter" } }

Em todos os casos você pode indexar o name propriedade nos genres array e o índice seriam usados ​​para as pesquisas.
db.collection.createIndex({'genres.name': 1})

https://docs.mongodb.com/manual/reference/ glossário/#term-dot-notation

https://docs.mongodb.com/manual/reference/operator/ consulta/em/