我们在 mongodb 数据库中查找距离较近的用户点有问题。我们的主要问题是我们不能聚合近点和距离。我们在以下查询中使用了 $geoWithin:
db.users.find({ location: { $geoWithin: { $centerSphere: [ [ 51.410608, 35.744042 ], 2/6378.1 ] } } }).sort({"user.lastActivity":-1}).limit(100 )
此查询在 0.005 秒内从 500204 条记录中返回 100 条记录。
我们还通过以下查询使用了 $nearSphere:
db.users.find({ location: { $nearSphere: { $geometry: { type: "Point", 坐标: [ 51.410608, 35.744042 ] }, $maxDistance: 2000 } } }).sort({"user.lastActivity" :-1}).limit(100)
此查询在 8.486 秒内从 500204 条记录中返回 100 条记录。
我们还使用 geoNear 和以下查询:
db.runCommand( { geoNear: "users", near: { type: "Point" , 坐标: [ 51.410608, 35.744042 ]},spherical: true , "limit": 100, "maxDistance": 2000 } )
此查询在 6.215 秒内从 500204 条记录中返回 100 条记录。此查询找到距离较近的点,但执行需要很长时间。
我们在 users.locations 字段上添加索引 2dsphere。
1) 请告诉我为什么$nearSphere 的执行时间比$nearSphere 多?2) 如何使用 $nearSphere 找到近点并计算返回记录距离?3)如何用更少的时间执行geoNear?
我们还在 1394018 记录上找到了 mysql 的近点。执行时间为 0.0011。这一次真是太棒了。
选择 st_distance_sphere(fld_geom, point(35.744042,51.410608)) 作为与 testgeom 的距离,其中 st_distance_sphere(fld_geom, point(35.744042,51.410608))<=2000 限制 100
我认为 mysql spatial 比 mongodb spatial 非常强大。