以下查询应返回距离为lng和lat的城市。城市集合在其gps字段中具有 2dsphere 索引。
City.native(function(err, collection) {
collection.aggregate([{
$geoNear: {
near: {
type: 'Point',
coordinates: [lng, lat]
},
distanceField: 'dist',
limit: limit,
maxDistance: distance,
distanceMultiplier: 1,
spherical: true
}
}], function(err, result) {
return res.send(result);
}
});
});
我的问题是,当我将距离设置为0时,查询仍会返回带有例如
的文档"dist": 27507.15237596358
但它不应该返回任何东西,因为在距离为0的地方没有城市。任何想法我做错了什么?
查询:
lat=51.9637151&lng=8.5610982&distance=1
返回具有以下位置的文档:
"gps": {
"type": "Point",
"coordinates": [
8.906756,
52.030319
]
},
"dist": 24824.18378549408
但是maxDistance设置为1。
在我在上面的代码中使用聚合之前,我使用了这段代码并且它起作用了:
City.native(function(err, collection) {
collection.geoNear(lng, lat, {
limit: limit,
maxDistance: maxDistance / 6371, // in km
distanceMultiplier: 6371, // converts radians to miles (use 6371 for km)
spherical: true
}, function(err, result) {});
然而,当我改为聚合时,它就停止了工作。
答案 0 :(得分:1)
我用以下查询解决了这个问题:
$geoNear: {
near: {
type: 'Point',
coordinates: [lng, lat]
},
distanceField: 'dist',
limit: limit,
maxDistance: distance * 1000,
distanceMultiplier: 1 / 1000,
spherical: true
}
似乎maxDistance接受值为米。因此,如果我希望它接受KM,我需要将它乘以1000.要输出距离为KM,distanceMultiplier必须为1/1000。