MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Index MongoDB sur les sous-documents non utilisés en fonction de la syntaxe de la requête

Je pense que je l'ai compris après avoir vérifié les documents mongo. Fondamentalement, il existe une différence de sémantique entre les deux. Essentiellement, dans la première forme de la requête {c: {d: d1}} , mongo suppose que vous spécifiez l'intégralité sous-document. Donc si vous avez un sous-document {c: {d: d1, e: e1}} , cela ne correspondra pas.

OTOH, la deuxième forme de la requête {'c.d': d1} implique que vous ne spécifiez qu'une correspondance sur un champ dans le sous-document. Cela correspondrait même si le sous-document contient d'autres champs ou des sous-sous-documents entiers.

Cette différence s'étend à l'indice. _ensureIndex({c: 1}) et _ensureIndex({'c.d': 1}) sont deux index différents, et même si le premier indexe l'intégralité du sous-document, il ne sera pas utilisé si vous effectuez une requête sur un champ individuel avec le c.d notation.