sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongo Fråga ett kapslat fält i en array.

Du skulle vilja använda $elemMatch för detta.

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

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

Du kan också använda mongodb dot notation och det kommer att fungera ungefär som du skulle förutom:

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

Mongodb vet hur man tolkar detta i fall genres är en array. Tänk bara på att punktnotationsfrågan är något tvetydig, eftersom den också kommer att matcha name egenskap om genres egendom är inte en array. Till exempel skulle detta dokument matcha:

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

I alla fall kan du indexera name egenskap i genres array och indexet skulle användas för uppslagningarna.

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

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

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




  1. Hur kan jag sortera MongoDB-frågeresultat efter inre arraystorlek?

  2. Konfigurera MongoDB-CR-autentisering som standard på MongoDB 3.x

  3. ändra nyckeldokument mongodb aggregat

  4. Hur förhindrar jag att _t-fältet visas när jag överför till MongoDB?