地理空间索引返回空数组

时间:2016-06-28 15:16:48

标签: node.js mongodb mongoose

我已经构建了一个示例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);
})

我得到了这个结果:

enter image description here

但是,我想让用户在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);
        })
    })

0 个答案:

没有答案