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

MongoDB indiziert Filialdokumente, die nicht verwendet werden, basierend auf der Syntax der Abfrage

Ich glaube, ich habe es herausgefunden, nachdem ich die Mongo-Dokumente überprüft habe. Im Grunde gibt es ein Unterschied in der Semantik zwischen diesen beiden. Im Wesentlichen in der ersten Form der Abfrage {c: {d: d1}} , geht Mongo davon aus, dass Sie das Gesamt angeben Unterdokument. Wenn Sie also ein Filialdokument {c: {d: d1, e: e1}} haben , wird es nicht übereinstimmen.

OTOH, die zweite Form der Abfrage {'c.d': d1} bedeutet, dass Sie nur eine Übereinstimmung in einem Feld innerhalb des Filialdokuments angeben. Dies würde auch dann übereinstimmen, wenn das Unterdokument andere Felder oder ganze Unterunterdokumente enthält.

Dieser Unterschied erstreckt sich auf den Index. _ensureIndex({c: 1}) und _ensureIndex({'c.d': 1}) sind zwei verschiedene Indizes, und obwohl der erste das gesamte Filialdokument indiziert, wird er nicht verwendet, wenn Sie ein einzelnes Feld mit dem c.d abfragen Schreibweise.