MongoDB 使用 $lt 和 $gt 的数字精度
MongoDB number precision using $lt and $gt
在使用(我假设)不同的精度查询时,我无法从 MongoDB 到 return 文档。
这是我的数据库中的示例记录:
{"P_Latitude": "32.896272727272", "P_Longitude": "-109.8293454545"}
这是一个 return 没有文档的示例查询:
{
"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 驱动程序中的行为相同。
谢谢!!!
问题是您将 P_Latitude
和 P_Longitude
值存储为字符串而不是数字。因此,比较是使用 lexical order 而不是数字顺序执行的。
您的文档应该如下所示:
{"P_Latitude": 32.896272727272, "P_Longitude": -109.8293454545}
并这样查询:
{
"P_Latitude": {
"$gt": 32.097473448554915,
"$lt": 33.45585495144508
},
"P_Longitude": {
"$gt": -110.0001001,
"$lt": -99.9999999
}
}
在使用(我假设)不同的精度查询时,我无法从 MongoDB 到 return 文档。
这是我的数据库中的示例记录:
{"P_Latitude": "32.896272727272", "P_Longitude": "-109.8293454545"}
这是一个 return 没有文档的示例查询:
{
"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 驱动程序中的行为相同。
谢谢!!!
问题是您将 P_Latitude
和 P_Longitude
值存储为字符串而不是数字。因此,比较是使用 lexical order 而不是数字顺序执行的。
您的文档应该如下所示:
{"P_Latitude": 32.896272727272, "P_Longitude": -109.8293454545}
并这样查询:
{
"P_Latitude": {
"$gt": 32.097473448554915,
"$lt": 33.45585495144508
},
"P_Longitude": {
"$gt": -110.0001001,
"$lt": -99.9999999
}
}