我們有一個問題,在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對於這個操作確實有不錯的表現。 –