如何在 Mongoid / MongoDB 中为 $within 查询提供 select 单位

How to select units for $within query in Mongoid / MongoDB

以下是我的查询,

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] } } })

在上面的查询中如何select单位,是米还是公​​里? 如果我现在想做米,我正在为 15 米的半径做 0.00015,这是正确的吗?

您使用的既不是米也不是公里。二维索引意味着您说您的数据在二维坐标系内。 .00015 在您的情况下表示 .00015 度。在平坦的 2d 平面中(或在具有足够接近误差范围的坐标的 2dsphere 索引上)您可以按照 this 转换为 km。

我还建议您使用 2dsphere 索引而不是 2d 索引,如果您使用的实际坐标可能彼此之间有任何合理的距离,因为地球的曲率会搞砸 mongodb如果它认为世界是平的,它的计算结果。

这个问题很有意思!我也一直在为此苦苦挣扎!很多 谷歌搜索,但答案就在 MongoDB documentation.

从这里你可以了解到:

For spherical query operators to function properly, you must convert distances to radians, and convert from radians to the distances units used by your application.

To convert:

  • distance to radians: divide the distance by the radius of the sphere (e.g. the Earth) in the same units as the distance measurement.
  • radians to distance: multiply the radian measure by the radius of the sphere (e.g. the Earth) in the units system that you want to convert the distance to.

The radius of the Earth is approximately 3,959 miles or 6,371 kilometers.

我们如何使用它?试试这个:

db.places.find( { location: { $geoWithin: { $centerSphere: [ [ 12.948430, 77.573868 ] ,
                                                           100 / 6371 ] } } } )

请注意,我使用了此技术并且适用于 MongoDB 2.6.

希望对您有所帮助!

祝你好运!