2012-03-16 24 views

Respuesta

37

Se podría crear ellos como si estuviera creando un índice en un campo de nivel superior:

db.collection.ensureIndex({"attrs.nested.value": 1}) 

Sí es necesario crear explícitamente índices en cada campo.

1

A. para indexar todas las propiedades en "anidada" tendrá que ponerlos en un índice por separado:

db.collection.createIndex({"attrs.nested.value": 1}); 
db.collection.createIndex({"attrs.nested.valuetwo": 1}); 

Esto se puede hacer con sólo una orden:

db.collection.createIndex({"attrs.nested.value": 1, "attrs.nested.valuetwo": 1}); 

B para indexar solo "valuetwo":

db.collection.createIndex({"attrs.nested.valuetwo": 1}) 

Uso createIndex sobre ensureIndex como ensureIndex es Deprecated since version 3.0.0

+4

Los dos conjuntos de comandos de creación de índice que usted proporciona en A son * no * equivalentes. El primero crea índices separados en 'value' y' valuetwo'. El segundo crea un único índice compuesto en ambos valores. Este índice solo se puede usar para consultas que especifican un valor para 'value'. Es decir, no es útil para consultas en 'valuetwo' solo. –

2

MongoDB crea automáticamente un índice multicircuito si cualquier campo es una matriz indexada; no necesita especificar explícitamente el tipo multikey.

Esto funciona tanto para db.coll.createIndex del escenario ({ "addr.pin": 1})

Escenario 1 objetos anidados

{ 
userid:"1234", 
addr: { 
     pin:"455522" 
    } 
}, 
{ 
userid:"1234", 
addr: { 
     pin:"777777" 
    } 
} 

Escenario 2 matrices anidadas

{ 
userid:"1234", 
addr: [ 
    pin:"455522", 
    pin:"777777", 
] 
} 

https://docs.mongodb.com/manual/core/index-multikey/

Cuestiones relacionadas