MongoDB, çok güzel bir Geospatial Indexing özelliğine sahiptir. Mongoid ile Rails'de nasıl kullanabilirim?Moğollarda Mongoid ile MongoDB - Geospatial Endeksleme
cevap
Sen ile (mongoid
class Item
include Mongoid::Document
field :loc, :type => Array
index(
[
[:loc, Mongo::GEO2D]
], background: true
)
end
yılında Ve sorguları
$ (maxDistance olmadan) komutu
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$near" => location})
$ yakın komutu yakın boyunca böyle jeo endeksleri tanımlayabilir maxDistance)
,12 tarafındandistance = 10 #km
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$near" => location , '$maxDistance' => distance.fdiv(111.12)})
dönüştürme mesafesi km kullanılarak ya da
$ centerSphere/$ nearSphere derecesini
kullanılarak olduğu gibi mesafeyi ayrılırken (tek dereceye yaklaşık 111,12 kilometre olan)location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$within" => {"$centerSphere" => [location, (distance.fdiv(6371))]}})
Bu sorgular öğeleri 10 km yarıçap içinde bulacak. Burada km ile çalışmak için mesafe/6371 (toprak yarıçapı) dönüştürmek gerekir.
$ kutusu (sınırlama kutusu sorgular)
first_loc = [80.24958300000003, 13.060422]
second_loc = [81.24958300000003, 12.060422]
items = Item.where(:loc => {"$within" => {"$box" => [first_loc, second_loc]}})
Bu verilen sınırlayıcı kutunun içinde öğeleri bulmak için size yardımcı olacaktır.
RameshVel'in cevabı mükemmeldir.
index(
{ loc: Mongo::GEO2D },
{ background: true }
)
Aslında bu, Mongoid 3.0.0 ile benim için çalışmadı, belgeler aşağıdaki formatı gösterir: indeks ({loc: "2d"}, {min: -200, max: 200}) '. Şerefe. – rjgonzo
Bütün bu cevapları MongoDB en yeni sürümleri ile bir eskimiş ve atacağım: Güncelleştirme olarak
, Mongoid 3.0.4, bencerake db:mongoid:create_indexes
ile çalışması için aşağıdaki gibi indeksi tanımlamak zorunda bazı
uninitialized constant Mongo::GEO2D
Mongoid 4/5 için, 2D Nesneleri veya koordinatları ile oynamanız gerekirse mongoid-geospatial gem'a bakmanızı öneririm. (MaxDistance ile)
- 1. MongoDB geospatial sorgusu $
- 2. Mongoid, Heroku, Device, MongoHQ ve Rails ile MongoDB hatası
- 3. Rails/Mongoid/MongoDB ile geçişleri kullanmak anlamlı mıdır?
- 4. Dokümandaki alanı mongodb olarak silme - Raylar + Mongoid
- 5. Mongoid/mongodb ve sorgulama gömülü belgeler
- 6. Firebase Geospatial kullanıyor mu?
- 7. mongoid
- 8. Çekirdek Veriler, endeksleme ile UITableView destekli
- 9. Mongodb, mongoid Raylar 3.1. * Aktif kayıtla ilgili hata
- 10. MATLAB İfade sütunu endeksleme
- 11. eventmachine ile mongoid ve mongomapper
- 12. mongoid ile gömülü belgeleri silme
- 13. mongoid .limit mongoid 3.1.x
- 14. Apache Ignite: Endeksleme nasıl çalışır?
- 15. MongoDB neden benzersiz bir dizin oluşturabilir ama Mongoid yapamaz? Ben aşağıdakileri yaparsanız MongoDB kabuğunda
- 16. Mongoid katıştırılmış belgeyi yinelemeli bulmak
- 17. MySQL geospatial uzantıları, küresel geometrilerle nasıl kullanılır
- 18. Neden mongodb
- 19. Raylar, Mongoid & Unicorn yapılandırma için Heroku
- 20. Rails On Rails Dağıtma Hatası Capistrano ile Uygulamalar (Mongoid)
- 21. Mongoid, ActiveAdmin'de Formtastic ile embedded_many/embedded_in ilişkileri ...?
- 22. Mongoid ile iyi çalışan Formtastic alternatif
- 23. Mongoid ile mevcut bir sınıfı nasıl kullanırım?
- 24. Mongoid ve Rails ile alan takma adları
- 25. MongoDB Coğrafi sorgular
- 26. Jenkins Branşman endeksleme yoluyla silindiğinde işleri sil
- 27. zaman indeksine ne Mongoid yer alan dizine?
- 28. mongoid para gösterimi
- 29. Solr Endeksleme Ayırma Alanı Açık Delimiter
- 30. Raylar 3.1 Mongoid has_secure_password
Ben komuta yakın $ kullanmayı deneyin Hata döndürürse: {: $ yakın, ,001799856011519079: $ maxDistance: [80,249, 13,060422]} jeo değerleri sayılar olmak zorunda herhangi bir düşünce? Sadece "$ near" ile çalışır, ancak "$ maxDistance" eklediğimde, boğulur. – Vasily
@Vasily, emin değilim .. $ maxdistance ile $ near sorgusu belirttiğiniz değerlerle mükemmel çalışır. 'Item.where (: loc => {" $ near "=> [80.249, 13.060422], '$ maxDistance' => 0.001799856011519079})'. iyi çalışıyor .. Bana denediğin sorguyu gösterebilir misin? o zaman – RameshVel
göreceğiz maxDistance kullandığımda aynı hata var. Ruby 1.8. Bir çözüm buldunuz mu? –