我编写了一个应用程序来查找本地机构并通过 RESTful API 提供它们。我的堆栈是:快递、快递资源和猫鼬。这是我的模型示例:
var PlaceSchema = new mongoose.Schema(
{
name: {
type: String,
required: true
},
geolocation: {
lat: Number,
lng: Number
},
address: {
type: String
}
}
);
PlaceSchema.index({
geolocation: '2d'
});
我检查了几次,我的 lon/lat 值已正确存储在数据库中,因此没有任何数据错误。
然后我运行查询以获取具有特定查询值的数据:
mongoose.connection.db.executeDbCommand(
{
geoNear: 'places',
near: [
parseFloat(req.body.lat),
parseFloat(req.body.lng)
],
num: limit,
query: {
// Some additional queries that
// don't impact the geo results.
},
spherical: true,
distanceMultiplier: 6371, // converting results to km
maxDistance: distance / 6371,
},
function(err, result)
{
res.send(200, {
status: true,
data: theaters
});
}
);
它返回的结果存在一些问题:a)以公里为单位的计算确实是错误的。在大多数情况下,有 6-7 公里的差异,但它会有所不同,b) 距离较近的地方比其他地方看起来更远。
我正在使用直接 mongoose 查询,因为它会返回计算出的距离(我的 API 返回需要它)。切换到 mongoose find 方法显然不会让我访问这些数据。
想知道我的索引是否可能是错误的?它应该是 2dsphere 吗?这方面的文档有点混乱,但我看到的大多数示例都只使用 2d。
非常感谢!