范围错误与 mongo 进行$near查找
Range Error with mongo doing a $near lookup
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
}
相关文章:
- 正在全局范围中查找JavaScript函数
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 在不使用jquery的情况下查找页面中的所有锚点并附加函数
- es6 相当于下划线查找位置
- 在DOM中查找一个模式并替换它's的内容使用jquery
- 如何使用jquery迭代具有相同属性的html元素并查找onclick事件
- 如何在不传递此信息的情况下查找被调用的元素
- Lodash 从值数组中查找数组中的值
- 如何使用JavaScript查找1和N之间的所有数字的总和
- 使用RegExp查找url中的字符
- 查找元素高度,包括边距
- 使用JS查找数组的平均值
- 查找最短和最长日期
- 猫鼬在特定记录中查找嵌套记录
- 使用javascript在MVC中查找网格长度时出错
- 在Javascript数组中查找绝对最大值
- 在javascript中查找单词
- JavaScript 在数组中查找缺少的数字
- 键按正则表达式以查找具有负值的小数
- 范围错误与 mongo 进行$near查找