我已经能够找到的Mongo地理搜索的所有示例和实现都使用数组属性[lng, lat]
来执行搜索:
示例记录将是:
{
name: 'foo bar',
locations: [
{
name: 'franks house',
geo: [-0.12, 34.51]
},
{
name: 'jennifers house',
geo: [-0.09, 32.17]
}
]
}
结果查询:
db.events.find({ 'locations.geo': { $nearSphere: [ -0.12, 34.51 ], $maxDistance: 0.02 }})
这很好用,但是记录的格式对于用户来说不是很好读或写,因为它不是自我记录lat
和lng
进入该数组的地方。陷入困境的空间。我想让记录更加人性化:
{
name: 'foo bar',
locations: [
{
name: 'franks house',
lat: 34.51,
lng: -0.12
},
{
name: 'jennifers house',
lat: 32.17,
lng: -0.09
}
]
}
这种类型的记录会产生什么样的mongo查询?我还没有找到任何这方面的例子,所以我想知道它是否可能。
答案 0 :(得分:1)
不建议为纬度和经度使用单独的字段。 2dsphere索引用于索引需要坐标数组的地理空间数据,请参阅documentation。这就是您无法找到单独坐标字段的示例的原因。
您应该将表示与数据存储分开。仅仅因为坐标存储在数组中,您不一定需要将它们作为数组呈现给用户。例如,您可以在保存时使用预调用来在数组中存储单独的参数,例如:
var schema = new Schema(..);
schema.pre('save', function (next) {
this.coordinates = [this.longitude, this.latitude]
next();
});