范围错误与 mongo 进行$near查找

Range Error with mongo doing a $near lookup

本文关键字:near 查找 进行 mongo 错误 范围      更新时间:2023-09-26

mongo进行$near查找时遇到奇怪的错误。数据库只是发疯了,吐出我们的范围错误。

下面的代码片段工作得很好

mongoose.models.Users.findOne({_id: req.user.id}, function(err, loggedin) {
    var location = JSON.parse(JSON.stringify(loggedin.location));
    mongoose.models.Users.find({
      location: { $near: { $geometry: location } },
    }, (err, users) => {
    })
})

但是,如果我高出JSON.parse(JSON.stringify())克隆,它会吓坏了

mongoose.models.Users.findOne({_id: req.user.id}, function(err, loggedin) {
    var location = loggedin.location;
    mongoose.models.Users.find({
      location: { $near: { $geometry: location } },
    }, (err, users) => {
    })
})

如您所见,使用猫鼬,但这不会影响此查询。location中一定有什么额外的东西,我看不到,但我找不到它。

如果我控制台.log loggedin.location在数据库查询后立即得到:

location: { type: 'Point', coordinates: [ -118.3141928, 34.0806176 ] },

我还设置了一个调试断点并得到同样的东西

另一个有趣的事实是,如果我使用 lean() 执行findOne查询,因此它只返回纯 JSON,那么第二个查询就可以完美运行。我想知道猫鼬在访问 geoJSON 属性时是否调用了一些 getter。

我的猫鼬模式是这样设置的

const UserSchema = new Schema({
  location: {
    type: { type: String },
    coordinates: [],
  },
})
userSchema.index({ location: '2dsphere' });
尝试

在没有额外分配的情况下尝试此操作,以及简单地运行查询

location: { $near: { $geometry: loggedin.location } },

但得到了同样的错误。

另一个有趣的事实是,如果我使用 mongoose.models.Users.collection 进入本机客户端并执行我的查询,我根本不会收到错误。

带有 mongo shell 输出和本机查询的示例要点

通过此代码试用

 $geoNear: {
            near: {type: "Point", coordinates:[parseFloat(req.query.latitude), parseFloat(req.query.longitude )]},
            distanceField: "dist.calculated",
            maxDistance:10000,
            spherical: true
        }