2011-04-06 4 views
0

Voici une version simplifiée de mes données:index géospatial MongoDB sur un tableau (multitouche + géospatiale)

> db.foo.insert({"name" : "jim", "locations" : [[10,10],[3,6],[1,2]]}) 
> db.foo.insert({"name" : "john", "locations" : [[1,5],[2,4]]}) 

Je voudrais être en mesure de faire des choses comme

> db.foo.find({ locations : { $near : [5,5] } }) 

Y at-il un façon de créer un index géospatial sur un tableau? Faire:

> db.foo.ensureIndex({locations: "2d"}) 

donne l'erreur suivante:

geo values have to be numbers: { 0: [ 1.0, 5.0 ], 1: [ 2.0, 4.0 ] } 

Tout conseil ou ressources seraient très appréciées.

Répondre

2

Actuellement, les index géospatiaux de MongoDB ne prennent en charge que 2 index de coordonnées; vous pouvez également avoir un seul index géospatial par collection.

Ils doivent être un tableau de deux valeurs numériques ou un document de deux valeurs numériques.

Tableau:

[40.889248, -73.898583] 

Document:

{ "lat" : 40.889248, "lon" : -73.898583 } 
+0

Ce n'est pas la réponse que j'espérais, mais merci. – YXD

1

J'ai eu un problème similaire, ma solution est de stocker l'emplacement dans un objet emplacement séparé et d'utiliser un index de clé à plusieurs. Faire que dans ce cas, vos documents pourraient ressembler à ceci:

{"name" : "jim", "locations" : [{"location": [10, 10]}, {"location": [3, 6]}, {"location": [1, 2]}]} 

et le ensureIndex ressemblerait à quelque chose comme ça

db.foo.ensureIndex({"locations.location": "2d"}) // could also use 2dsphere 
+0

cela ne semble pas permettre l'interrogation par un tableau d'emplacement d'éléments pour trouver tout ce qui est long de trois éléments, etc. ai-je raison de penser que cette méthode utilise des index multi-clés? – bmbigbang

Questions connexes