Docs Menu
Docs Home
/ /

Crea un índice en un campo insertado en un arreglo

Puedes crear índices en campos de documentos incrustados dentro de arreglos. Estos índices mejoran el rendimiento de las queries en campos específicos integrados que aparecen en arreglos. Cuando creas un índice en un campo dentro de un arreglo, MongoDB almacena ese índice como un índice multiclave.

Para crear un índice, utilice el db.collection.createIndex() método. Tu operación debería asemejarse a este prototipo:

db.<collection>.createIndex( { <field>: <sortOrder> } )

El ejemplo en esta página utiliza una colección inventory que contiene estos documentos:

db.inventory.insertMany( [
{
"item": "t-shirt",
"stock": [
{
"size": "small",
"quantity": 8
},
{
"size": "large",
"quantity": 10
},
]
},
{
"item": "sweater",
"stock": [
{
"size": "small",
"quantity": 4
},
{
"size": "large",
"quantity": 7
},
]
},
{
"item": "vest",
"stock": [
{
"size": "small",
"quantity": 6
},
{
"size": "large",
"quantity": 1
}
]
}
] )

Es necesario pedir más existencias cada vez que se tenga menos de cinco productos en acciones. Para determinar cuáles artículos se deben reordenar, query los documentos donde un elemento del arreglo stock tiene un quantity menor que 5. Para mejorar el rendimiento de esta consulta, puede crear un índice en el campo stock.quantity.

La siguiente operación crea un índice multiclave ascendente en el campo stock.quantity de la colección inventory:

db.inventory.createIndex( { "stock.quantity": 1 } )

Debido a que stock contiene un valor de arreglo, MongoDB almacena este índice como un índice multiclave.

El índice contiene una clave para cada valor individual que aparece en el campo stock.quantity. El índice es ascendente, lo que significa que las claves se almacenan en este orden: [ 1, 4, 6, 7, 8, 10 ].

El índice soporta consultas que seleccionan en el campo stock.quantity. Por ejemplo, la siguiente query devuelve documentos donde al menos un elemento en el arreglo stock tiene un quantity menor que 5:

db.inventory.find(
{
"stock.quantity": { $lt: 5 }
}
)

Salida:

[
{
_id: ObjectId("63449793b1fac2ee2e957ef3"),
item: 'vest',
stock: [ { size: 'small', quantity: 6 }, { size: 'large', quantity: 1 } ]
},
{
_id: ObjectId("63449793b1fac2ee2e957ef2"),
item: 'sweater',
stock: [ { size: 'small', quantity: 4 }, { size: 'large', quantity: 7 } ]
}
]

El índice también soporta operaciones de ordenamiento en el campo stock.quantity, como en esta query:

db.inventory.find().sort( { "stock.quantity": -1 } )

Salida:

[
{
_id: ObjectId("63449793b1fac2ee2e957ef1"),
item: 't-shirt',
stock: [ { size: 'small', quantity: 8 }, { size: 'large', quantity: 10 } ]
},
{
_id: ObjectId("63449793b1fac2ee2e957ef2"),
item: 'sweater',
stock: [ { size: 'small', quantity: 4 }, { size: 'large', quantity: 7 } ]
},
{
_id: ObjectId("63449793b1fac2ee2e957ef3"),
item: 'vest',
stock: [ { size: 'small', quantity: 6 }, { size: 'large', quantity: 1 } ]
}
]

Cuando se ordena un arreglo de objetos en orden descendente, MongoDB ordena primero en función del campo con el elemento de mayor valor.

Volver

Crear en un campo de arreglo

En esta página