【问题标题】:$maxdistance no longer works when upgrading to MongoDB 2.6.3升级到 MongoDB 2.6.3 时,$maxdistance 不再有效
【发布时间】:2014-07-15 08:39:25
【问题描述】:

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

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    是的,在 2.6 中进行了一些更改,有点隐藏在文档中。在您的情况下,在 2.6 版中,$maxDistance 需要位于 $near 文档内部,而不是外部:

    $maxDistance 变化¶

    说明

    • 对于 GeoJSON 数据的 $near 查询,如果查询指定 $maxDistance,则 $maxDistance 必须在 $near 文档内。在
      以前的版本,$maxDistance 可以在内部或外部
      $near 文档。

    • $maxDistance 必须为正值。

    解决方案

    • 更新任何现有的对 GeoJSON 数据的 $near 查询,这些数据当前在 $near 文档之外具有 $maxDistance

    • 更新 $maxDistance 为负值的任何现有查询。

    http://docs.mongodb.org/manual/release-notes/2.6-compatibility/

    因此,在您的情况下,查询需要如下所示:

    {
        "lastLocation": {
            "$near": {
                "$geometry": {
                    "type": "Point",
                    "coordinates": [ -122.195 , 37.423]
                },
               "$maxDistance": 10000
            }
        }
    }
    

    【讨论】:

    • 谢谢!我在查看发行说明时错过了它。我想 $maxDistance 在那里确实更有意义,尽管很遗憾不得不在使用它们的任何地方更改查询。
    猜你喜欢
    • 1970-01-01
    • 2021-05-25
    • 2019-09-17
    • 1970-01-01
    • 2019-12-31
    • 2018-11-20
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多