2016-06-30 3 views
0

J'ai du mal à trouver les éléments les plus proches d'un ensemble de lat/lon.Trouver les plus proches dans MongoDB aux coordonnées

Mes objets ont leur latitude/longitude stockées en tant que tel:

"address": "some_address", 
    "city": "some_city", 
    "coordinates": [ 
     32.214048, 
     -84.361727 
    ] 

C'est la requête que je suis actuellement en utilisant, quand je l'utilise je reçois aucun résultat en arrière, même pas un tableau vide.

collection.find({coordinates: {$near: [40.296898, -111.694647] }, $maxDistance:100})

Comment puis-je interroger mes objets pour trouver les plus proches?

Répondre

4

Vous devez effectuer trois opérations principales.

  1. Vous devez enregistrer vos coordonnées dans l'ordre [longitude, latitude]. Ceci est requis par mongo comme vous pouvez le voir dans docs. Ainsi, vos données doivent ressembler à

    { "adresse": "some_address", "ville": "some_city", "coordonnées": [ -84,361727, 32,214048 ] }

  2. Une fois vos données correctement définies, vous devez créer un index 2dsphere afin de pouvoir utiliser geoNear.

    db.collection.createIndex ({coordonnées: "2dsphere"})

  3. Ensuite, vous devez fixer votre requête. Ici besoin de passer un nearSphere $ avec des propriétés de la géométrie, qui est l'endroit où vous mettez vos coordonnées dans l'ordre que nous avons dit avant [longitude, latitude]

    db.collection.find ({ coordonnées: { $ nearSphere: { géométrie de $: { Type: "point", coordonnées: [-84,361727, 32,214048] }, $ maxDistance: 100 } } })

+0

Est-il possible de dire dans quelle mesure chacun l'entrée est à partir du point donné t? Ou est-ce seulement fourni avec geoNear()? – Clip

+0

Eh bien, je pense qu'il ne peut être obtenu que par le biais de geoNear, cependant, il existe deux façons sur la façon d'y parvenir. En utilisant le cadre d'agrégation https://docs.mongodb.com/manual/reference/operator/aggregation/geoNear/ ou ou la commande geoNear https://docs.mongodb.com/manual/reference/command/geoNear/ – Roger