升级到MongoDB 2.6.3时,$ maxdistance不再有效

时间:2014-07-14 23:50:33

标签: mongodb

我目前在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]

1 个答案:

答案 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
        }
    }
}