2013-03-07 5 views
21

Acording à la documentation MongoDB (link) si vous voulez stocker l'information géospatiale dans un champ de document, vous avez deux options, un tableau ou un document incorporé, et l'ordre doit toujours être longitude latitude.Comment stocker l'information géospatiale dans MongoDB

Si je veux utiliser un document incorporé, comment puis-je m'assurer de l'ordre du champ? Ou les champs dans le document incorporé doivent-ils avoir un nom spécifique?

Répondre

24

avec un document incorporé, quel que soit le nom du champ dans le document incorporé, le premier champ doit contenir la valeur de longitude et le deuxième champ doit contenir la valeur de latitude. Par exemple:

db.zips2.insert({ _id: 1, city: "b", loc: { x: -73.974, y: 40.764 } }) 
db.zips2.insert({ _id: 2, city: "b", loc: { x: -73.981, y: 40.768 } }) 

Ici, le champ x serait la longitude; et le champ et serait la latitude.

Cordialement

+4

'Les valeurs du tableau peuvent être soit des tableaux, comme dans [55,5, 42,3], ou les documents incorporés, comme dans {lng: 55,5, Lat: 42.3} .' - http://docs.mongodb.org/manual/core/geospatial-indexes/#store-location-data – Loren

29

2D Geospatial Index, Store Location Data

« Tous les documents doivent stocker les données de localisation dans le même ordre. Si vous utilisez la latitude et la longitude comme système de coordonnées, Entreposez toujours longitude premier. Opérateurs d'index sphériques 2d MongoDB seulement reconnaître [longitude, latitude]. "

Here's a good post about Geospatial Queries in MongoDB au cas où vous en auriez besoin.

+0

Cela m'a juste sauvé d'une heure de maux de tête. Je suivais un tutoriel et ils ont omis cette information. Mongo a continué à lancer une erreur lors de ensureIndex: "Impossible d'extraire les clés géographiques de l'objet, la géométrie mal formée?" –

3

Je vous conseille de nommer votre domaine: x and y, au lieu de longitude/latitude, car après une mise à jour, la longitude et la latitude seront réorganisées par ordre alphabétique, donc inversées.

1

Ces index nous permettent de trouver des choses en fonction de l'emplacement. Nous avons 2 options: 2D & 3D En 2D, nous avons un plan cartésien avec x & y coordonnées et un tas de différents objets.

2D cartesian plane

Le document doit stocker une sorte de x, y emplacement avec ensureIndex({'location':'2d', 'type':1}). L'option type spécifie la direction de l'index, c'est-à-dire ascendant ou descendant (et c'est facultatif). Ce peut être un indice composé. Pour trouver des emplacements proches, utilisez la commande db.collectionName.find({location: {$near:[x,y]}}). Et pratiquement parlant, la façon dont cela est souvent utilisé est à travers un limit. Pour limiter les résultats à 20, ajoutez .limit(20).

+8

superbes compétences mspaint –

0

documentation MongoDB dit ce qui suit:

Un champ coordonnées nommé spécifiant les coordonnées de l'objet. Si vous spécifiez latitude et longitude coordonnées, la première liste longitude et alors de latitude:

valeurs de longitude valides sont comprises entre -180 et 180, inclusivement. Les valeurs de latitude valides sont comprises entre -90 et 90 (les deux inclus).

Oficial documentation MongoDB: https://docs.mongodb.com/manual/geospatial-queries/#geospatial-indexes

Questions connexes