我正在开发一个用于存储位置的API,包括它们的坐标,但我不知道对它们进行建模。 我应该
latitude: {
type: Float
},
longitude: {
type: Float
},
或者有没有一种方法可以将它们建模为数组,如[43.95,-26.75]? 我想稍后过滤它们的距离。
答案 0 :(得分:2)
答案 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],
}