MongoDBには非常に素晴らしいGeospatial Indexing機能があります。モンゴイドと一緒にRailsでどのように使うことができますか?MongoDB with Mongoid in Rails - Geospatial Indexing
答えて
あなたはと(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)
.12(1度は約111.12キロです)キロを使用して、またはそれは$ centerSphere/$ nearSphereが
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$within" => {"$centerSphere" => [location, (distance.fdiv(6371))]}})
これを照会度を使用しているように、距離を残すことによって
distance = 10 #km
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$near" => location , '$maxDistance' => distance.fdiv(111.12)})
変換距離半径10キロ以内のアイテムが見つかります。ここではkm/kmで動作させるために距離/ 6371(地球半径)を変換する必要があります。
$ボックス(バウンディングボックスクエリは)
first_loc = [80.24958300000003, 13.060422]
second_loc = [81.24958300000003, 12.060422]
items = Item.where(:loc => {"$within" => {"$box" => [first_loc, second_loc]}})
これは、与えられたバウンディングボックス内のアイテムを見つけるのに役立ちます。
RameshVelの答えは素晴らしいです。アップデートとして
は、Mongoid 3.0.4で、私は次のようにrake db:mongoid:create_indexes
で動作させるために、インデックスを定義する必要がありました:
index(
{ loc: Mongo::GEO2D },
{ background: true }
)
実際には、これは 'Mongoid 3.0.0'では私にとってはうまくいかず、ドキュメントは' index({loc: "2d"}、{min:-200、max:200})の形式を示しています。乾杯。 – rjgonzo
これらすべての答えはMongoDBのの最新バージョンと時代遅れであり、スローされます一部uninitialized constant Mongo::GEO2D
モンゴイド4/5の場合、2Dオブジェクトまたは座標を使用してプレイする必要がある場合は、mongoid-geospatial gemをご覧ください。 (maxDistance付き)
- 1. MongoDB geospatial query with $ not
- 2. MongoDB with PostgreSQL with One Rails App
- 3. Django haystack with elasticsearch、indexing issue
- 4. acts_as_list with has_many:through in rails
- 5. has_many:through with has_and_belongs_to_many in Rails
- 6. CapybaraとMongoDB/Mongoid Railsアプリケーション(SQLデータベースなし)
- 7. I18n in Rails 3 with adminネームスペース
- 8. mongoidとmongomapper with eventmachine
- 9. mongoid/mongodb - 複製/コピーレコード
- 10. Mongoid、Heroku、Device、MongoHQ、RailsでMongoDBエラーが発生しました
- 11. Rails 3.1 Mongoid has_secure_password
- 12. ノードmongodb-nativeまたはmongooseでのGeoSpatialインデックス?
- 13. collection_select/mongoid/mongodbの問題
- 14. Mongoid on Railsの使い方は?
- 15. セロリwith MongoDB Broker
- 16. HerokuのRails、Mongoid&Unicornの設定
- 17. mongo_mapperまたはmongoid with rails4
- 18. Rails/Mongoidデータベースの移行
- 19. MongoDB with Angular App
- 20. Dart with MongoDB
- 21. GroupBy in Mongo with PHP
- 22. MongoidとRailsでのフィールドエイリアス
- 23. Rails 3 MySql and MongoDB
- 24. mongodbとmongoidのための学習リソース
- 25. Fetch in in ssl with android
- 26. MongoidでmongoDBの未処理クエリを表示するには
- 27. RestHeart with mongoDB
- 28. Pylons Authkit with Mongodb
- 29. MongoDB with Drupal 7
- 30. MongoDB/mongoid update_attributesメソッドが遅いですか?
私は、コマンドの近くに$を使用してみてください、それはエラーを返します:{:$近く、0.001799856011519079:$ maxDistance:[80.249、13.060422]} GEO値は、数値である必要はあり 任意の考えは?これは、 "$ near"の場所で動作しますが、 "$ maxDistance"を追加すると、それが鳴ります。 – Vasily
@Vasily、私は確信していません。$ maxdistanceを持つ$近いクエリは、指定した値で完全に正常に動作します。 'Item.where(:loc => {" $ near "=> [80.249,13.060422]、 '$ maxDistance' => 0.001799856011519079})'となります。それはうまく動作します。私はあなたが試していたクエリを表示することができますか?私たちが参照してください – RameshVel
私はmaxDistanceを使用すると同じエラーがあります。 Ruby 1.8。あなたは解決策を見つけましたか? –