J'essaie simplement de faire fonctionner une simple requête near
. Voici un échantillon de mon document.
{"point":
{"type": "Point",
"coordinates": [30.443902444762696, -84.27326978424058]},
"created_on": {"$date": 1398016710168},
"radius": 180,
"user": {"$oid": "53543188eebc5c0cc416b77c"},
"_id": {"$oid": "53544306eebc5c0ecac6cfba"},
"expires_on": {"$date": 1399831110168}
}
et avec Mongod j'ai essayé la commande:
db.bar.find({point: {$near: [-84.26060492426588, 30.45023887165371]}});
mais j'obtiens cette erreur:
erreur: { "$ err": "Impossible d'exécuter la requête: requête de traitement d'erreur: ns = foo.bar skip = 0\nTree: champ GEONEAR = point maxdist = 1.79769e + 308 isNearSphere = 0 || Premier: notFirst: chemin complet: point\nSort: {}\nProj: {}\n le planificateur a renvoyé l'erreur: impossible de trouver l'index pour la requête $ geoNear ", "code": 17007 }
Peut-être que mon google-fu n'est pas aussi précis aujourd'hui mais je n'ai rien trouvé. De plus, j'ai exécuté la commande Ensure Index. Mon intention est que ce soient des emplacements de carte.
db.bar.ensureIndex({a:1});
db.bar.ensureIndex({geo:"2d"});
Peu de problèmes, vous avez créé vos index sur la collection foo de la base de données foo, mais interrogez la collection bar. Vous devez être sur la bonne collection.
En lisant le document que vous avez inséré, vous devez ajouter un index "2dsphere" pour supporte les objets geoJson . Cet index doit être sur l'élément "point" de vos documents, alors essayez
db.bar.createIndex({point:"2dsphere"});
Vous pouvez ensuite interroger comme suit en fournissant un obj geoJson pour la requête:
db.bar.find(
{ point :
{ $near :
{
$geometry : {
type : "Point" ,
coordinates : [-84.27326978424058, 30.443902444762696] },
$maxDistance : 1
}
}
}
)
db.prod.createIndex({ "location": "2d" })
Ceci résolu pour le même problème pour moi.
Où prod est mon nom de collection et emplacement est le nom de la colonne qui stocke l'emplacement géographique (GeoPoint)
On peut trouver quelques discussions à propos de la même chose ici
Donc, il semble y avoir quelques fausses choses ici:
db.foo.createIndex ({geo: "2d"})
N'échoue pas car il n'y a pas actuellement de champ appelé "geo" et le champ avec les données aurait dû être à cet endroit. Si vous aviez utilisé «point» à la place du champ correct, vous auriez alors reçu une erreur vous indiquant que ce type d'index n'est pas valide pour les données GeoJSON. Vous avez besoin d'un index "2dsphere":
db.points.createIndex({ "point": "2dsphere" })
db.points.find ({point: { $ près: { $ géométrie: { type: "Point", coordonnées : [-84.26060492426588, 30.45023887165371]. } } }})
Voir la documentation de $near