SailsJS geoNear Issues

在SailsJS中使用geoNear工作时遇到了很多麻烦。

在我的UserController.js我想在我的用户模型中的location字段上做一个geoNear查询。 它被定义为带有2d索引的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

https://github.com/mongodb/node-mongodb-native/blob/dd7bb687749ffab6ec4c4a6b052ef2cdffc0d780/lib/mongodb/collection.js#L1446

http://docs.mongodb.org/manual/reference/command/geoNear/

我有同样的问题,这是由:

但是,当我提出如下要求时:

HTTP://本地主机:1337 / API /用户/位置/ LAT = 42.8003&长= -73.8808

所以当数据在服务器端被接收时,它被转换为“String”。 试试这个来解决它:

  var latitude = parseFloat(req.param('lat')); var longitude = parseFloat(req.param('long')); 

希望这会有所帮助。

我有类似的问题,直到我把它添加到我的bootstrap.js文件

 module.exports.bootstrap = function(cb) { // Ensure we have 2dsphere index on Property so GeoSpatial queries can work! sails.models.stores.native(function (err, collection) { collection.ensureIndex({ loc: '2dsphere' }, function () { // It's very important to trigger this callack method when you are finished // with the bootstrap! (otherwise your server will never lift, since it's waiting on the bootstrap) cb(); }); }); };