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

índice de subdocumento en mongo

Puedes hacer cualquiera:

> db.collection.ensureIndex({"data.name": 1,"data.age":1, "data.job" : 1})
> db.collection.ensureIndex({"data": 1})

Esto se analiza en la documentación en índices en campos incrustados e índices en subdocumentos

La sección importante de la sección del subdocumento es 'Al realizar coincidencias de igualdad en los subdocumentos, el orden de los campos es importante y los subdocumentos deben coincidir exactamente'.

Esto significa que los 2 índices son los mismos para consultas simples.

Sin embargo, como muestra el ejemplo del subdocumento, puede obtener algunos resultados interesantes (que quizás no espere) si solo indexa todo el subdocumento en lugar de un campo específico y luego realiza un operador de comparación (como $gte ):si indexa un subcampo específico, obtiene un índice menos flexible, pero potencialmente más útil.

Realmente todo depende de su caso de uso.

De todos modos, una vez que haya creado el índice, puede verificar lo que se crea con:

> db.collection.getIndexes()
[
{
    "v" : 1,
    "key" : {
        "_id" : 1
    },
    "ns" : "test.collection",
    "name" : "_id_"
},
{
    "v" : 1,
    "key" : {
        "data.name" : 1,
        "data.age" : 1,
        "data.job" : 1
    },
    "ns" : "test.collection",
    "name" : "data.name_1_data.age_1_data.job_1"
}

]

Como puede ver en la salida, creó una nueva clave llamada data.name_1_data.age_1_data.job_1 (el _id_ siempre se crea el índice).

Si desea probar su nuevo índice, puede hacerlo:

> db.collection.insert({data:{name: "A",age:"B", job : "C"}})
> db.collection.insert({data:{name: "A1",age:"B", job : "C"}})
> db.collection.find({"data.name" : "A"}).explain()
{
    "cursor" : "BtreeCursor data.name_1_data.age_1_data.job_1",
     .... more stuff

Lo principal es que puedes ver que se usó tu nuevo índice (BtreeCursor data.name_1_data.age_1_data.job_1 en el campo del cursor es lo que indica que este es el caso). Si ve "cursor" : "BasicCursor" , entonces no se utilizó su índice.

Para obtener información más detallada, consulte aquí.