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

¿Cómo trata MongoDB las consultas find().sort() con respecto a los índices únicos y compuestos?

Si entendí tu punto, esto podría ayudar:

Suponiendo que tenga estos documentos para la muestra

{
    field1 : 1,
    field2 : 2,
},
{
    field1 : 2,
    field2 : 3,
},
{
    field1 : 1,
    field2 : 4,
}

Paso 1:tienes un índice solo para archivado1 (nombre del índice field1_1 )}:realice:db.test3.find({field1:1}).sort({field2:1})

el mongo usa field1_1 índice para buscar en el documento. el resultado de .explain() es:

"cursor" : "BtreeCursor field1_1",
"isMultiKey" : false,
"n" : 2,
"nscannedObjects" : 2,
"nscanned" : 2,

Paso 2:agregue su índice compuesto, asígnele el nombre field1_1_field2_1 , ahora tiene 2 índices para el campo 1.

ejecutar find().sort() consulta, tendrás

"cursor" : "BtreeCursor field1_1_field2_1",
"isMultiKey" : false,
"n" : 2,
"nscannedObjects" : 2,
"nscanned" : 2,

Conclusión:

si usa db.test3.find({field1:1}).sort({field2:1}) , mongo usará field1_1_field2_1 índice.

si usa db.test3.find({field1:1}) , mongo usará field1_1 índice.

Yo tu caso, si tienes solo field1_1_field2_1 index y está realizando db.test3.find({field1:1}) , mongo usará field1_1_field2_1 índice también.