从mongodb数据库检索数据时在控制台中获取null

时间:2019-04-29 15:25:15

标签: node.js mongodb mongoose

我试图从数据库访问数据,数据存储在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

1 个答案:

答案 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(原始值)之间寻找值值加上一个最低有效数字)。您可能需要根据系统/语言稍微扩大范围。