MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongo Fragen Sie ein verschachteltes Feld innerhalb eines Arrays ab.

Sie möchten $elemMatch verwenden dafür.

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

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

Sie können auch die mongodb-Punktnotation verwenden, und es funktioniert so ziemlich wie Sie es tun würden, außer:

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

Mongodb weiß, wie dies im Fall von genres zu interpretieren ist ist ein Array. Denken Sie nur daran, dass die Abfrage in Punktnotation etwas mehrdeutig ist, da sie auch mit name übereinstimmt -Eigenschaft, falls die genres Eigenschaft ist kein Array. Dieses Dokument würde beispielsweise übereinstimmen mit:

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

In allen Fällen können Sie den name indizieren -Eigenschaft in den genres Array und der Index würden für die Lookups verwendet.

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

https://docs.mongodb.com/manual/reference/ glossary/#term-dot-notation

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