我试图从数据库访问数据,数据存储在distance字段中,但是在检索数据时,我在控制台中得到了null。
请任何人帮助我。
连接完成 空
我正在使用以下代码
mongoose.connect(db)
.then(()=>{
console.log('connection done')
})
.catch(err =>{
console.log(err)
})
const query = new schema({
distance:{
type:String
}
})
const per = mongoose.model('iot',query)
per.findOne({distance:2887.2021794319153})
.then(person=>{
console.log(person)
})
.catch(err=>console.log(err))
输出应该是具有其ID和距离的整个文档,但是我得到的输出为NULL
答案 0 :(得分:0)
计算机不能很好地准确表示十进制数字。以数字格式存储的任何实数仅是所提供值的近似表示。您可以在https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html上了解更多信息。这种推理对MongoDB也适用。
在这种情况下,DB中distance
的值将是2887.2021794319153
的近似表示。在查询中(从JavaScript)传递的值也将是相同数字的近似值。两种近似不必总是“严格地”相等。这就是为什么在处理浮点运算时应该依赖“范围”而不是“相等”的原因。尝试以下查询:
const per = mongoose.model('iot',query);
per.findOne({
distance: {
$gt: 2887.2021794319152,
$lt: 2887.2021794319154
}
})
.then(person=>{
console.log(person)
})
.catch(err=>console.log(err))
在此示例代码中,不是在寻找distance
的精确小数值,而是在2887.2021794319152
(原始值减去一个最低有效数字的值)和2887.2021794319154
(原始值)之间寻找值值加上一个最低有效数字)。您可能需要根据系统/语言稍微扩大范围。