使用$ lt和$ gt的MongoDB数字精度

时间:2017-05-04 20:10:14

标签: mongodb monk

在使用(我假设)不同的精度查询时,我无法让MongoDB返回文档。

以下是我的数据库中的示例记录:

{"P_Latitude": "32.896272727272", "P_Longitude": "-109.8293454545"}

以下是不返回任何文档的示例查询:

{
    "P_Latitude": {
        "$gt": "32.097473448554915",
        "$lt": "33.45585495144508"
    },
    "P_Longitude": {
        "$lt": "-110.0001001",
        "$gt": "-99.9999999"
    }
}

然而,当我将最后一个$ gt更改为大于-100的数字时,它的工作原理如下:

{
    "P_Latitude": {
        "$gt": "32.097473448554915",
        "$lt": "33.45585495144508"
    },
    "P_Longitude": {
        "$lt": "-110.0001001",
        "$gt": "-100.9999999"
    }
}

这是精确问题还是其他问题?它在shell中的行为与使用Monk驱动程序相同。

感谢!!!

1 个答案:

答案 0 :(得分:1)

问题是您将P_Longitude{"P_Latitude": 32.896272727272, "P_Longitude": -109.8293454545} 值存储为字符串而不是数字。因此,比较是使用lexical order而不是数字顺序执行的。

您的文档应该是这样的:

{
    "P_Latitude": {
        "$gt": 32.097473448554915,
        "$lt": 33.45585495144508
    },
    "P_Longitude": {
        "$gt": -110.0001001,
        "$lt": -99.9999999
    }
}

并且这样询问:

 <package> is not installed for architecture -- i386