sql >> Base de Datos >  >> NoSQL >> MongoDB

Los índices de MongoDB en los subdocumentos no se utilizan según la sintaxis de la consulta

Creo que lo descubrí después de revisar los documentos de mongo. Básicamente, hay es una diferencia en la semántica entre esos dos. Esencialmente, en la primera forma de la consulta {c: {d: d1}} , mongo asume que estás especificando el todo subdocumento. Entonces, si tiene un subdocumento {c: {d: d1, e: e1}} , no coincidirá.

OTOH, la segunda forma de la consulta {'c.d': d1} implica que solo está especificando una coincidencia en un campo dentro del subdocumento. Esto coincidiría incluso si el subdocumento tiene otros campos o sub-subdocumentos completos.

Esta diferencia se extiende al índice. _ensureIndex({c: 1}) y _ensureIndex({'c.d': 1}) son dos índices diferentes, y aunque el primero indexa todo el subdocumento, no se utilizará si consulta un campo individual con el c.d notación.