我正在尝试使用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
}
有谁知道我哪里出错了?任何帮助将不胜感激!
答案 0 :(得分:11)
如果您的数据也是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版本中对空间有一些重大改变。
答案 1 :(得分:1)
这不是一个解决方案,因为我从来没有完成上述工作,但使用geoNear我设法得到我想要的。
db.runCommand( { geoNear : 'catchmerequests', near:
{ type: 'Point', coordinates : [50, 50] }, spherical : true } );
如果有人能够找出为什么原来的$ near尝试失败仍然会受到赞赏,但我会将此发布给其他正在寻找替代工作的人。