首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB:使用$geoWithin运算符无法得到正确的结果

MongoDB:使用$geoWithin运算符无法得到正确的结果
EN

Stack Overflow用户
提问于 2015-12-11 13:41:26
回答 3查看 1.5K关注 0票数 0

我用$geoWithin做圆圈,我没有得到预期的结果。有两个集合,一个用于users,第二个用于items。我正在为项目设置半径和坐标。所以我必须在坐标和半径内找到一个用户。

用户集合

代码语言:javascript
复制
{
    "_id" : NumberLong(25287),
    "_class" : "com.samepinch.domain.user.User",
    "name":"XYZ",
    "location" : [
        74.866247,
        31.63336
    ]
}

项目集合

代码语言:javascript
复制
{
    "_id" : NumberLong(46603),
    "itemName" : "Chandigarh",
    "categoryName" : "TRAVELLING",
    "location" : {
        "_id" : null,
        "longitude" : 77.15319738236303,
        "latitude" : 28.434568229025803,
        "radius" : 29153.88048637637
    }
}

根据项目坐标和用户坐标,两地之间的距离约为500公里。

查询

代码语言:javascript
复制
db.users.find({ location: { $geoWithin: { $center: [ [77.15319738236303,28.434568229025803], 29153.88048637637/3963.2] } } } ).count()

根据$geoWithin的说法,用户不应该显示,而应该显示。如果我做错了什么,请帮助我。

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-14 08:33:33

我想你的问题是,你在半径太宽的范围内搜索。根据MongoDB文档$centerSphere的正确语法是:

代码语言:javascript
复制
db.<name>.find( {
    loc: { $geoWithin: 
     { 
        $centerSphere: [ [ <longitude>, <latitude> ],
        <radius in MILES>/3963.2 ] } 
     }
} )

你现在在你的点周围29153.88048637637英里半径范围内搜索点,这两个点都在你定义的中心半径内。

我希望这能帮助你:)

票数 1
EN

Stack Overflow用户

发布于 2015-12-14 10:44:19

如果您希望将来在您的项目中查询与$geoWithin$centerSphere相关的内容,那么只需要这样指定您的字段结构:-

代码语言:javascript
复制
"location" : {
        "lng" : 77.15319738236303,
        "lat" : 28.434568229025803
    },
"redius" : 120

然后进行如下查询:-

代码语言:javascript
复制
db.collection.find( {location: { $geoWithin: { $centerSphere: [ [ lat, lng ], radius/3963.2] } }} )

票数 2
EN

Stack Overflow用户

发布于 2018-02-20 20:12:10

只是因为我已经碰到这几次了,我想详细说明一下阿斯巴托什的回答。

半径必须是弧度,转换是基于球体的半径,以你想要工作的单位为基础。假设你是作为你的球体和地球一起工作,你想让你的$geoWithin以米为单位,然后你将radius场设置为meters/(6371*1000),或者你想要的距离除以你的距离所代表的单位的地球半径。

这份清单应有助于:

  • 米:以meters/6371000表示的距离(地球的平均半径以米为单位)
  • 公里:km/6371距离
  • Miles:miles/3959中的距离
  • 脚部:feet/20903520中的距离
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34224913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档