我目前在MongoDB上有一个查询,它查询位于特定距离内的设备。它已经好几个月了。 当我从MongoDB 2.4.10升级到2.6.3时,查询不再有效,并且不会返回任何结果。
{
"lastLocation": {
"$near": {
"$geometry": {
"type": "Point",
"coordinates": [ -122.195 , 37.423]
}
},
"$maxDistance": 10000
}
}
玩了之后,似乎没有$ maxDistance,查询就可以了。但是,我无法让$ maxDistance工作。
我有两个数据库并列完全相同的数据,一个是MongoDB的每个版本,2.4是返回数据,2.6不是(所以不是因为那个距离内没有设备)。
maxDistance是否存在已知问题,或者单位是否有变化或工作原理?
指数如下:
{
v: 1,
name: "lastLocation_2dsphere",
key: {
lastLocation: "2dsphere"
},
ns: "s-dev.devices",
background: true,
safe: true
}
示例条目:
"lastLocation": [-122.19888, 37.42316]
答案 0 :(得分:0)
是的,2.6中有一些变化,隐藏在文档中。在您的情况下,在2.6版本中,$ maxDistance需要位于$ near文档内,而不是在外部:
$ maxDistance的更改¶
描述
对于GeoJSON数据的$ near查询,如果查询指定$ maxDistance,则$ maxDistance必须位于$ near文档内。在
以前的版本,$ maxDistance可以在内部或外部 $ near document。$ maxDistance必须是正值。
解决方案
更新当前在$ near文件外面有$ maxDistance的GeoJSON数据的任何现有$ near查询
更新$ maxDistance为负值的所有现有查询。
http://docs.mongodb.org/manual/release-notes/2.6-compatibility/
因此,在您的情况下,查询需要如下所示:
{
"lastLocation": {
"$near": {
"$geometry": {
"type": "Point",
"coordinates": [ -122.195 , 37.423]
},
"$maxDistance": 10000
}
}
}