sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB indexerar på underdokument som inte används baserat på syntax för frågan

Jag tror att jag kom på det efter att ha kontrollerat mongodokumenten. I grund och botten finns en skillnad i semantik mellan dessa två. I huvudsak i den första formen av frågan {c: {d: d1}} , mongo antar att du anger hela underdokument. Så om du har ett underdokument {c: {d: d1, e: e1}} , det kommer inte att matcha.

OTOH, den andra formen av frågan {'c.d': d1} innebär att du bara anger en matchning på ett fält i underdokumentet. Detta skulle matcha även om underdokumentet har andra fält eller hela underunderdokument.

Denna skillnad sträcker sig till indexet. _ensureIndex({c: 1}) och _ensureIndex({'c.d': 1}) är två olika index, och även om det första indexerar hela underdokumentet, kommer det inte att användas om du frågar på ett enskilt fält med c.d notation.




  1. Fråga distinkt med MongoMapper

  2. Maven kör inte med Spigot

  3. mongoexport samlad export till en csv-fil

  4. Vad är beteendet för att ställa in timeout vid körning av aggregeringspipeline i MongoDB Java Driver?