MongoDB和Geo Query

时间:2014-03-27 12:34:44

标签: mongodb geospatial

我有一组文档,其中有两个重要的字段:srcCoordinates和dstCoordinates。它们看起来像这样:

"dstCoordinates" : {
    "latitude" : 46.46647770314815,
    "longitude" : 30.642414093017578
}

我必须添加什么类型的索引才能搜索给定点半径范围内的所有文档?半径 - 以米为单位!

我想做这样的事情:

db.collection.find({dstCoordinates: {$near:[46.46647770314815, 30.642414093017578], $maxDistance: 1000}})

1000 - 以米为单位的距离!

一般来说,问题是:如何找到1000米范围内的所有点?

2 个答案:

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