我一直在Express和Mongoskin中构建一个小API。我添加了一个简单的聚合geoNear查询来响应给定的params。服务器返回200,我没有错误。我知道我指向正确的集合和所有内容,当我在Mongo的shell中运行查询时,它工作正常。代码如下:
app.get('/collections/:collectionName/geonear', function(req, res, next) {
req.collection.aggregate([
{
"$geoNear": {
"near": [req.query.lng, req.query.lat],
"distanceField": "distance"
}
},
{
"$sort": {"distance": -1}
}
],
function(e, results) {
res.send(results);
});
});
答案 0 :(得分:0)
问题是你在near
数组中传递请求查询字符串而不是整数,所以尝试首先使用parseInt()
解析它们以返回整数:
app.get('/collections/:collectionName/geonear', function(req, res, next) {
var lng = parseInt(req.query.lng),
lat = parseInt(req.query.lat);
req.collection.aggregate(
[
{
"$geoNear": {
"near": [lng, lat],
"distanceField": "distance"
}
},
{
"$sort": {"distance": -1}
}
],
function(e, results) {
res.send(results);
});
})
- 更新 -
来自OP @JeffLuppes:
由于这适用于坐标,因此最好将它们解析为浮点数 保留完整坐标输入。而不是我使用的parseInt() parseFloat()。
修订后的解决方案是使用parseFloat()
:
app.get('/collections/:collectionName/geonear', function(req, res, next) {
var lng = parseFloat(req.query.lng),
lat = parseFloat(req.query.lat);
req.collection.aggregate(
[
{
"$geoNear": {
"near": [lng, lat],
"distanceField": "distance"
}
},
{
"$sort": {"distance": -1}
}
],
function(e, results) {
res.send(results);
});
})