我们有一个问题,在mongodb数据库中用距离找到用户点附近的点。我们的主要问题是我们无法用近距离聚集近点。我们使用$ geoWithin下面查询:Mongodb在用户点附近找到点距离
db.users.find({位置:{$ geoWithin: {$ centerSphere:[[51.410608,35.744042],2/6378.1]}}})。排序( {“user.lastActivity”: - 1})。limit(100)
此查询在0.005秒内从500204条记录返回100条记录。
我们也使用$ nearSphere下面的查询:
db.users.find({位置:{$ nearSphere:{$几何:{类型: “点”, 坐标:51.410608,35.744042 ]},$ maxDistance:2000}}} )排序({ “user.lastActivity”: - 1})限制(100)
该查询返回从500204个记录在8.486秒100分的记录。
我们还使用geoNear下面查询:
db.runCommand({geoNear: “用户”, 邻近:{类型: “点”,坐标:[51.410608,35.744042]}, 球形:true, “limit”:100,“maxDistance”:2000})
此查询在6.215秒内从500204条记录返回100条记录。这个查询发现距离近点但执行需要很长时间。
我们在users.locations字段中添加索引2dsphere。
1)请说出为什么$ nearSphere执行时间超过$ nearSphere? 2)如何用$ nearSphere找到近点并计算回报记录的距离? 3)如何用更少的时间执行geoNear?
我们也在1394018记录上找到与mysql的近点。执行时间是0.0011。这一次真的太棒了。
SELECT st_distance_sphere(fld_geom,点(35.744042,51.410608)),如从testgeom 距离其中st_distance_sphere(fld_geom,点( 35.744042,51.410608))< = 2000 LIMIT 100
我想的MySQL空间比mongodb空间非常强大。
感谢。我们将添加2dsphere索引,但问题没有解决。性能不佳。 –
然后考虑在不同的集合中保留不相关的数据,或者查看您的服务器规格。 – arboreal84
感谢您的解决方案。我们可以在mysql上运行这个部分,但是我们不能这样做。 mysql对于这个操作确实有不错的表现。 –