2014-05-22 3 views
0

J'ai une collection comme ci-dessous. Je veux indexer "location" et "product_list.id". MongoDB semble autoriser seulement un seul indice multi-clé dans un document. Tout travail possible?index géospatial avec un autre indice multi-clés ... Des solutions?

{ 
    "location":[62.99932,71.23424], 
    "product_list":[ 
     {"id":"wf2r34f34ff33", "price": "87.99"}, 
     {"id":"f334r3rff43ff", "price": "21.00"}, 
     {"id":"wf2r34f34ffef", "price": "87.99"}      
     ], 

    } 

Répondre

0

Il est vrai que vous ne pouvez index sur un seul type de tableau de champ dans un seul indice composé d'une collection, mais vous semblez parler de requêtes « géo-spatiales » qui sont quelque chose d'un peu différent. Il n'y a rien de mal à cela du tout:

db.collection.ensureIndex({ "location": "2d", "product_list": 1 }) 

Ceci est une forme parfaitement valide pour un indice composé. Donc, il ressemble à un tableau, mais dans ce cas, MongoDB le traite différemment.

+0

Parfait! Merci Niel! Pouvez-vous me diriger vers une documentation ou un blog qui donne une explication détaillée de la même chose. Je vais essayer ça. – Joe

+0

Il y a quelques déclarations dans la documentation comme [this] (http://docs.mongodb.org/manual/reference/operator/query/near/#considerations) Qui dit que vous ne pouvez pas combiner une requête géo-spatiale avec une autre spéciale comme le texte. Mais il n'y a rien de mal à ajouter une autre clé simple en composé. Donc, quelque chose qui aboutit à un index multi-clés en composé n'est pas un problème. Le test simple est que la création d'index ne provoque pas d'erreur et peut en fait être utilisée dans une requête. Si vous avez essayé 'location: 1, product_list: 1' par exemple, vous obtiendrez une erreur. –

Questions connexes