nodejs和mongodb:地理定位的模型如何?

时间:2017-08-17 08:06:00

标签: node.js mongodb express mongoose

我正在开发一个用于存储位置的API,包括它们的坐标,但我不知道对它们进行建模。 我应该

latitude: { 
 type: Float 
},
longitude: {
 type: Float 
},

或者有没有一种方法可以将它们建模为数组,如[43.95,-26.75]? 我想稍后过滤它们的距离。

3 个答案:

答案 0 :(得分:2)

使用MongoDB's Geospatial Data

  

在MongoDB中,您可以将地理空间数据存储为GeoJSON对象或传统坐标对。

然后您可以使用Geospatial Queries

答案 1 :(得分:2)

最近我从事地理定位工作,我想我可以回答您的问题,为时已晚,但这可能会帮助正在寻找解决方案的其他人。

location: {
  type: {
    type: String,
    default: 'Point',
  },
  coordinates: [Number], // [22.2475, 14.2547]  [longitude, latitude]
};

以上述方式,我们必须在我们的模式定义中引入此属性。然后,我们需要在集合中创建一个 2dsphere 索引,如下所示:-

db.collection.createIndex( { location : "2dsphere" } )

就是这样,现在您可以根据位置触发查询了

db.collection.aggregate([
        {
          $geoNear: {
            near: {
                type: 'Point',
                coordinates: [22.4568, 14.5412],        
            },
            key: 'location',
            distanceField: 'distance', // in meter
            spherical: true,
          },
        }
        ])

答案 2 :(得分:1)

最好将它们存储为GeoJSOn数据,然后通过应用2dsphere索引来查询。

此类存储的一个示例是: -

"geolocation" : {
         "type":"Point",
         "coords":[-71.1410879999999960,42.4051060000000040]      
    }

架构格式: -

geolocation: {
    type: { type: String },
    coordinates: [Number],
}