【发布时间】:2015-03-04 01:19:03
【问题描述】:
让 geoNear 在 SailsJS 中工作时遇到了很多麻烦。
在我的 UserController.js 中,我试图对我的用户模型中的 location 字段进行 geoNear 查询。它被定义为带有二维索引的 JSON。以下是字段数据的示例:
"location" : { "type" : "Point" , "coordinates" : [ 42.8003 , -73.8808 ]}
在我的 UserController 中,我的 geoSearch 方法如下所示:
geoSearch: function(req, res) {
//sails.log.verbose(req);
var lat = req.param('lat');
var lng = req.param('long');
var limit = req.param('limit') || 50;
var maxDistance = req.param('radius') || 5000; //meters
sails.log.verbose('lat : ' + lat);
sails.log.verbose('lng : ' + lng);
sails.log.verbose('limit : ' + limit);
sails.log.verbose('maxDistance : ' + maxDistance);
if (!(lat && lng)) {
//bad stuff
res.badRequest('Missing lat or long!');
} else {
User.native(function(err, collection) {
collection.geoNear(lng, lat, {
limit: limit,
maxDistance: maxDistance, // in meters
query: {}, // allows filtering
distanceMultiplier: 3959, // converts radians to miles (use 6371 for km)
spherical : true
}, function(mongoErr, users) {
if (mongoErr) {
console.error(mongoErr);
res.send('_geoSearch failed with error='+mongoErr);
} else {
console.log('users=',users);
res.json(users.results);
}
});
});
}
}
但是,当我提出以下请求时:
http://localhost:1337/api/user/location/?lat=42.8003&long=-73.8808
我得到了输出:
verbose: lat : 42.8003
verbose: lng : -73.8808
verbose: limit : 50
verbose: maxDistance : 5000
{ [MongoError: exception: 'near' field must be point]
name: 'MongoError',
errmsg: 'exception: \'near\' field must be point',
code: 17304,
ok: 0 }
我已经为此苦苦挣扎了很长一段时间,任何帮助或指导将不胜感激。
其他信息:
MongoDB ~3.0 SailsJS ~0.10
【问题讨论】:
-
我应该知道
geoNear是什么吗?此外,“当前”不是一个版本。该错误具有相当的描述性:您正在向 mongo 发送point类型以外的其他内容 -
我指定了当前版本#,数据是我单步调试时的一个点。我也尝试过旧坐标对。我还为您在 mongoDB 规范中引用了 geoNear。
-
另外,我试过使用 .aggregate 和其他方法,总是报同样的错误。
标签: node.js geolocation sails.js sails-mongo