MongoDB具有非常好的Geospatial Indexing功能。我怎樣才能用Mongoid在Rails中使用它?MongoDB在MongoDB中使用Mongoid in Rails - 地理空間索引
15
A
回答
47
可以在mongoid
class Item
include Mongoid::Document
field :loc, :type => Array
index(
[
[:loc, Mongo::GEO2D]
], background: true
)
end
而對於查詢
$附近命令(不maxDistance)
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$near" => location})
$附近命令定義地理指標如下(以maxDistance)
由111.distance = 10 #km
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$near" => location , '$maxDistance' => distance.fdiv(111.12)})
轉換距離(一個度約爲111.12公里)的使用公里時,或離開距離,因爲它是使用度
$ centerSphere/$ nearSphere查詢
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$within" => {"$centerSphere" => [location, (distance.fdiv(6371))]}})
這將在10公里範圍內找到物品。在這裏,我們需要將距離/ 6371(地球半徑)轉換爲與km一起工作。
$箱(邊框查詢)
first_loc = [80.24958300000003, 13.060422]
second_loc = [81.24958300000003, 12.060422]
items = Item.where(:loc => {"$within" => {"$box" => [first_loc, second_loc]}})
這將幫助你找到給定的邊框內的項目。
7
RameshVel的回答很好。
爲更新,在Mongoid 3.0.4,我有如下,以使其與rake db:mongoid:create_indexes
工作來定義索引:
index(
{ loc: Mongo::GEO2D },
{ background: true }
)
+6
其實這對於''Mongoid 3.0.0'不適合我,這個文檔指出'index({loc:「2d」},{min:-200,max:200})'格式。乾杯。 – rjgonzo
0
所有這些問題的答案是過時與MongoDB中的最新版本,並會拋出一些uninitialized constant Mongo::GEO2D
對於mongoid 4/5,我建議你看看mongoid-geospatial gem如果你需要玩2D對象或座標。
相關問題
- 1. C#中的MongoDB地理空間索引#
- 2. Mongoid/mongodb索引
- 3. 使用node.js在mongodb中的地理空間索引
- 4. MongoDB的地理空間草堆索引
- 5. 在三維數據中使用MongoDB的地理空間索引
- 6. 在MongoDB中創建地理空間索引時出錯
- 7. 使用$附近時Mongodb地理空間索引錯誤
- 8. Geonames和MongoDB:將Access 2010導出到MongoDB以使用地理空間索引
- 9. 的MongoDB:地理空間索引和覆蓋索引查詢
- 10. 查詢源和目的地與地理空間索引mongodb mongomapper
- 11. 在MongoDB中一起創建地理空間和類型索引?
- 12. 使用Rails和Mongoid在Heroku上爲MongoDB編制索引
- 13. MongoDB的地理空間 - 搜索指向
- 14. MongoDB地理空間設計
- 15. 獲取地理空間索引工作MongoDB中1.4.3
- 16. mongodb中地理空間索引的內部機制
- 17. node-mongodb-native或mongoose中的地理空間索引?
- 18. 地理空間聚類(MongoDB)
- 19. Ruby on Rails + MongoDB和MongoID
- 20. 基於$ in的MongoDB索引?
- 21. MongoDB:地理空間索引數組格式不正確
- 22. Mongodb地理空間索引與GoogleMaps方向服務
- 23. MongoDB - 具有聚合的地理空間索引
- 24. 的MongoDB:地理空間索引沒有得到補充
- 25. MongoDB中使用每收集一個以上地理空間索引以下
- 26. 使用mongoid查看MongoDB中的現有索引
- 27. SQL到MongoDB的使用Rails + Mongoid
- 28. 在PHP MongoDB的地理空間查詢
- 29. MongoDB地理空間索引,如何將它與數組元素一起使用?
- 30. 在MongoDB的地理空間和節點中使用URL參數
當我嘗試使用$附近命令(maxDistance)它返回一個錯誤: 地理值必須是數字:{$ maxDistance:0.001799856011519079,$附近:80.249,13.060422]} 有什麼想法?它適用於「$ near」,但是當我添加「$ maxDistance」時,它會窒息。 – Vasily
@Vasily,我不確定.. $ maxdistance的$ near查詢完全符合您指定的值。 'Item.where(:loc => {「$ near」=> [80.249,13.060422],'$ maxDistance'=> 0.001799856011519079})'。它工作正常..也許你可以告訴我你正在嘗試的查詢?我們將會看到 – RameshVel
我使用maxDistance時出現同樣的錯誤。 Ruby 1.8。你們有沒有找到解決辦法? –