11

我正在尝试使用 mongodb 中的一些地理定位功能。使用带有 $near 的查找查询似乎不起作用!

我目前在我的数据库中有这个对象:

{
    "Username": "Deano",
    "_id": {
        "$oid": "533f0b722ad3a8d39b6213c3"
    },
    "location": {
        "type": "Point",
        "coordinates": [
            51.50998,
            -0.1337
        ]
    }
}

我还设置了以下索引:

{
  "v": 1,
  "key": {
    "location": "2dsphere"
  },
  "ns": "heroku_app23672911.catchmerequests",
  "name": "location_2dsphere",
  "background": true
}

当我运行此查询时:

db.collectionname.find({ "location" : { $near : [50.0 , -0.1330] , $maxDistance : 10000 }})

我收到此错误:

error: {
    "$err" : "can't parse query (2dsphere): { $near: [ 50.0, -0.133 ], $maxDistance: 10000.0 }",
    "code" : 16535
}

有谁知道我要去哪里错了?任何帮助将非常感激!

4

2 回答 2

14

如果您的数据也是 GeoJSON 格式,您似乎需要使用 GeoJSON 格式,就像您的一样。如果您使用:

db.collectionname.find({
    "location": {
        $near: {
            $geometry:
                { type: "Point", coordinates: [50.0, -0.1330] }, $maxDistance: 500
        }
    }
})

它应该工作。我可以使用该字段的 GeoJSON 存储格式复制您的错误,但是文档在查询表达式中称为遗留点。我认为文档有点不清楚,因为他们建议您可以同时使用 GeoJSON 和带有 2dsphere 索引2dsphere的旧坐标

我正在使用 2.4.10,因为它值得,因为在 2.4 版本中对空间进行了一些重大更改。

于 2014-04-05T20:57:33.220 回答
1

这不完全是一个解决方案,因为我从来没有完成上述工作,但是使用 geoNear 我设法得到了我想要的。

db.runCommand( { geoNear : 'catchmerequests', near: 
{ type: 'Point', coordinates : [50, 50] }, spherical : true } );

如果有人能找出为什么最初的 $near 尝试失败,那仍然会受到赞赏,但我将把这个发布给其他正在寻找工作替代方案的人。

于 2014-04-05T17:25:28.520 回答