如何在 Mongoid / MongoDB 中为 $within 查询选择单位
Posted
技术标签:
【中文标题】如何在 Mongoid / MongoDB 中为 $within 查询选择单位【英文标题】:How to select units for $within query in Mongoid / MongoDB 【发布时间】:2015-03-18 04:09:59 【问题描述】:以下是我的查询,
db.places.save("location":[ 12.948430, 77.573868 ])
db.places.save("location":[ 12.947813, 77.573653 ])
db.places.ensureIndex( "location" : "2d" )
db.places.find( "location" : $within : $center : [[12.948430, 77.573868],0.00015] )
在上面的查询中如何选择单位,是米还是公里? 如果我现在想做米,我正在做 0.00015 半径为 15 米,这是正确的吗?
【问题讨论】:
【参考方案1】:您既没有使用米也没有使用公里。二维索引意味着您说您的数据在二维坐标系内。 .00015
在您的情况下表示 0.00015 度。在平面 2d 平面上(或在坐标足够接近的 2dsphere 索引上,误差幅度无关紧要),您可以按照 this 转换为 km。
如果您使用的实际坐标可能彼此之间有任何合理距离,我还建议您使用 2dsphere 索引而不是 2d 索引进行索引,因为如果 mongodb 认为世界,地球的曲率会搞砸它的计算是平的。
【讨论】:
【参考方案2】:这是一个非常有趣的问题!我也一直在为此苦苦挣扎!很多谷歌搜索,但答案就在 MongoDB documentation。
从这里你可以了解到:
要使球形查询运算符正常工作,您必须将距离转换为弧度,并将弧度转换为应用程序使用的距离单位。
转换:
弧度的距离:将距离除以球体(例如地球)的半径,单位与距离测量值相同。 弧度到距离:将弧度测量值乘以球体(例如地球)的半径,以单位制将距离转换为。地球的半径约为 3,959 英里或 6,371 公里。
我们如何使用它?试试这个:
db.places.find( location: $geoWithin: $centerSphere: [ [ 12.948430, 77.573868 ] ,
100 / 6371 ] )
请注意,我使用了这种技术,它适用于 MongoDB 2.6。
希望有帮助!
祝你好运!
【讨论】:
以上是关于如何在 Mongoid / MongoDB 中为 $within 查询选择单位的主要内容,如果未能解决你的问题,请参考以下文章
如何在 mongoid dsl 中编写 mongodb $near 查询?
如何实现has_many:通过与Mongoid和mongodb的关系?
如何使用 MongoDB 和 Mongoid 在 Rails 3 上进行适当的数据库测试 (TDD)
如何避免在 MongoDB(使用 Mongoid)或 ActiveRecord(使用 MySQL 的 Rails)中插入两次相同的记录?