我有一组文档,其中有两个重要的字段:srcCoordinates和dstCoordinates。它们看起来像这样:
"dstCoordinates" : {
"latitude" : 46.46647770314815,
"longitude" : 30.642414093017578
}
我必须添加什么类型的索引才能搜索给定点半径范围内的所有文档?半径 - 以米为单位!
我想做这样的事情:
db.collection.find({dstCoordinates: {$near:[46.46647770314815, 30.642414093017578], $maxDistance: 1000}})
1000 - 以米为单位的距离!
一般来说,问题是:如何找到1000米范围内的所有点?
答案 0 :(得分:1)
您需要在“dstCoordinates”字段上创建geospatial
索引才能使$ near查询生效。创建2d
索引的示例查询:
db.collection.ensureIndex({"dstCoordinates":"2d"})
创建索引后,find()查询应该可以正常工作。
注意:为了存储位置信息,MongoDB中的数组是首选。那就是:
loc:[经度,纬度]
优先于
loc:{lng:经度,纬度:纬度}
此外,您需要以经度,纬度顺序存储坐标
答案 1 :(得分:0)
使用纬度,经度,半径进行地理查询 - 从数据库中查找地点
var geolocation = new Array(-26.90, 50.70 ); // lng, lat
PlacesAPI.aggregate(
[
{"$geoNear":
{"near": {"type":"Point","coordinates": geolocation },
"spherical":true,
"distanceField":"distance",
"maxDistance": 50000
}
},
{ $project : {
_id:0,
name: "$name",
details: "$details",
distance: "$distance",
}
}
],function (err, result) {
console.log(result)
})