我已经构建了一个示例node.js REST api,它使用mongoose方案存储用户及其在mongodb中的位置:
var UserSchema = new mongoose.Schema({
email: { type: String, lowercase: true },
firstName: { type: String },
lastName: { type: String },
loc: {
type: [Number], // [<longitude>, <latitude>]
index: '2d', // create the geospatial index
default: [0,0]
},
profileImage: { type: String },
created: { type: Date, default: Date.now },
},
{ collection: 'User' }
);
UserSchema.index({email : 1}, {unique:true});
var UserModel = mongoose.model( 'User', UserSchema );
exports.UserModel = UserModel;
如果我添加一些虚拟数据,然后使用以下代码查询所有用户:
UserModel.find({}, function(err, users) {
if (err) {
return res.json(400, err)
}
return res.json(200, users);
})
我得到了这个结果:
但是,我想让用户在30公里范围内。 下面的查询始终返回空数组,即使它们都具有相同的坐标[0,0]。
UserModel.findById(req.userID, function (err, current) {
if(err){
return res.status(400).json({
status: "false",
result: {message: "Error occurred when fetching user"}
})
}
// Set max distance to 30 km
var maxDistance = 30;
// we need to convert the distance to radians
// the raduis of Earth is approximately 6371 kilometers
maxDistance /= 6371;
UserModel.find({loc: {$near: current.loc, $maxDistance: maxDistance }}, function(err, users) {
if (err) {
console.log("tu" + err);
return res.json(500, err);
}
return res.json(200, users);
})
})