2012-03-16 7 views

Répondre

37

Vous les créer comme si vous étiez en train de créer un index sur un champ de niveau supérieur:

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

Vous avez besoin de créer explicitement des index sur chaque champ.

1

A. pour indexer toutes les propriétés "imbriquée" vous devrez les indexer séparément:

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

Cela peut se faire en une seule commande avec:

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

B pour indexer simplement "valuetwo":

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

Utilisation createIndex sur ensureIndex comme ensureIndex est Deprecated since version 3.0.0

+4

Les deux ensembles de commandes de création d'index que vous donnez dans A ne sont pas * équivalents. Le premier crée des index séparés sur 'value' et' valuetwo'. La seconde crée un index composé unique sur ces deux valeurs. Cet index ne peut être utilisé que pour les requêtes qui spécifient une valeur pour 'value'. Autrement dit, ce n'est pas utile pour les requêtes sur 'valuetwo' seul. –

2

MongoDB crée automatiquement un index multitouche si un champ indexé est un tableau; vous n'avez pas besoin de spécifier explicitement le type multi-clé.

Cela fonctionne pour les deux db.coll.createIndex ({ "addr.pin": 1}) est le scénario

Scénario 1 objets imbriqués

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

Scénario 2 tableaux imbriqués

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

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

Questions connexes