2010-10-30 12 views
57

En MongoDB, si tuviera que almacenar una matriz (por ejemplo ["red", "blue"]) en un campo "color", qué índice de "red" y "blue" por lo que se pudo consultar para "red", por ejemplo, o qué hacer en {"red", "blue"} un índice compuesto?¿Cómo funciona el índice MongoDB?

Respuesta

76

Cuando se trata de matrices de indexación, MongoDB indexa cada valor de la matriz para que pueda consultar elementos individuales, como "rojo". Por ejemplo:

> db.col1.save({'colors': ['red','blue']}) 
> db.col1.ensureIndex({'colors':1}) 

> db.col1.find({'colors': 'red'}) 
{ "_id" : ObjectId("4ccc78f97cf9bdc2a2e54ee9"), "colors" : [ "red", "blue" ] } 
> db.col1.find({'colors': 'blue'}) 
{ "_id" : ObjectId("4ccc78f97cf9bdc2a2e54ee9"), "colors" : [ "red", "blue" ] } 

Para obtener más información, consulte la documentación de MongoDB en Multikeys: http://www.mongodb.org/display/DOCS/Multikeys

+0

es posible buscar una matriz parcial como para ("colores": [ "rojo", "azul", "verde"]), ¿puedo buscar ("colores": ["rojo", "azul"]) o tengo que hacerlos individualmente? –

+2

@GauravAbbi - Creo que funciona, pero mongo solo usará el índice para encontrar la primera clave de matriz. Después de eso está escaneando ese conjunto de documentos para aquellos que coinciden con el resto de las claves. – Mnebuerquo

+0

¿Qué consideraciones se tomarían para usar índices multikey como apposed a un índice compuesto. por ejemplo, un índice que describe un color principal y un color secundario? –

Cuestiones relacionadas