文件结构:(Facebook文件)
{
"_id" : ObjectId("57a984222daf2339b1e06090"),
"name" : "Arts /entertainment/nightlife",
"location" : {
"state" : "",
"country" : "Nigeria",
"latitude" : 6.45306,
"city" : "Lagos",
"longitude" : 3.39583,
"street" : "no 15 petre agha street oke -afa isolo lagos",
"zip" : "+234"
},
"id" : "519994548127995",
"category" : "Arts/entertainment/nightlife",
"category_list" : [
{
"name" : "Arts & Entertainment",
"id" : "133436743388217"
}
]
}
我的问题: MongoDB查询(使用$geoWithin: { $center: [ [ <x>, <y> ] , <radius> ] }
)查找圈内的所有地点是什么?
圈子:中心:纬度= 48.856614,经度= 2.3522219000000177。半径= 10公里。
我感谢任何可以帮助我的答案。
答案 0 :(得分:3)
“notionquest”的答案帮助我找到了解决方案。但这正是我的答案:
第一步:更改文档的结构,以便拥有如下位置字段:
"location" : [x , y]` where x is the latitude, and y is the longitude.
第二步:在位置字段上创建“2d”索引:
db.geocircle.createIndex( { location : "2d" } );
上一步:查询为:
db.geocircle.find(
{ location: { $geoWithin: { $center: [ [ 48.856614, 2.3522219000000177], 0.089992801 ] } } }
);
重要说明:查询中圆圈的半径以度为单位,因此我需要将10公里转换为度数。鉴于一度大约是111.12公里,我们可以做数学。
干杯!
答案 1 :(得分:0)
稍微修改地理空间数据的文档结构,如下所示。
/* 1 */
{
"_id" : ObjectId("57a984222daf2339b1e06090"),
"name" : "Arts /entertainment/nightlife",
"state" : "",
"country" : "Nigeria",
"location" : {
"type" : "Point",
"coordinates" : [
6.45306,
3.39583
]
},
"city" : "Lagos",
"street" : "no 15 petre agha street oke -afa isolo lagos",
"zip" : "+234",
"id" : "519994548127995",
"category" : "Arts/entertainment/nightlife",
"category_list" : [
{
"name" : "Arts & Entertainment",
"id" : "133436743388217"
}
]
}
在位置字段上创建&#34; 2dsphere&#34; 索引。
db.geocircle.createIndex( { location : "2dsphere" } );
然后,执行查询查询。
以下查询应找到拉各斯。
db.geocircle.find(
{ location: { $geoWithin: { $center: [ [ 6.45306, 3.39583], 10 ] } } }
);
db.geocircle.find(
{ location: { $geoWithin: { $center: [ [ 6.45310, 3.39590], 10 ] } } }
);
此查询不应该找到拉各斯。
db.geocircle.find(
{ location: { $geoWithin: { $center: [ [ 16.45310, 3.39590], 10 ] } } }
);