2011-06-29 3 views
6
db.hello.ensureIndex({"array1":1, "array2":1}) 

MongoDB ne permet pas cela, car ils disent "ça peut devenir incontrôlable". Cependant, je sais que mes tableaux ne dépasseront jamais la longueur de 3. Comment pirater MongoDB pour permettre l'indexation de plusieurs tableaux à la fois?Comment indexer deux tableaux dans MongoDB?

Lors de l'utilisation d'un indice de composé, au plus une des valeurs indexées dans tout document peut être un tableau. Donc, si nous avons un indice sur {a: 1, b: 1}, les documents suivants sont à la fois bien:

{a: [1, 2], b: 1} {a: 1, b: [1, 2]} Ce document, cependant, ne parviendra pas à inséré, avec un message d'erreur "ne peut pas indexer les tableaux parallèles":

{a: [1, 2], b: [1, 2 ]} Le problème avec des tableaux parallèles d'indexation est que chaque valeur dans le produit cartésien de les clés composées doivent être indexées , ce qui peut devenir très rapidement .

+0

Êtes-vous sûr de vouloir utiliser l'index sur les deux baies? Si vous avez déjà une grande sélectivité sur l'un d'entre eux, cela peut suffire. – Thilo

+0

@Thilo ... le premier tableau a généralement environ 100 éléments. Le deuxième tableau a environ 2-3 éléments. Pensez-vous que je dois indexer le deuxième tableau? – TIMEX

+1

@TIMEX Ne pas indexer le 2ème tableau et voir comment il fonctionne en utilisant la commande explain. – Joe

Répondre

2

La réponse courte à votre question est; tu ne le fais pas. La seule option disponible est de stocker chaque paire unique en tant qu'élément de tableau unique. Ainsi, plutôt que:

{a:[1,2], b[8,9]} 

vous amassez

{ab:[[1,8], [1,9], [2,8], [2,9]]} 

Évidemment, cela a quelques inconvénients, donc cela dépend vraiment de votre propre usecase si c'est une solution de contournement appropriée. Je suis d'accord cependant que mongo ne devrait pas rejeter plusieurs index de tableau juste pour la preuve idiot. C'est une bonne fonctionnalité pour les tableaux de cardinalité petits/bas.

Questions connexes