MongoDB ha una bellissima funzione Geospatial Indexing. Come posso usarlo in Rails with Mongoid?MongoDB con Mongoide in Rails - Indicizzazione Geospaziale
risposta
È possibile definire indici geo come questo in mongoid
class Item
include Mongoid::Document
field :loc, :type => Array
index(
[
[:loc, Mongo::GEO2D]
], background: true
)
end
E per le query
$ vicino comando (senza maxDistance)
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$near" => location})
$ vicino comando (con maxDistance)
distance = 10 #km
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$near" => location , '$maxDistance' => distance.fdiv(111.12)})
Converti distanza da 111.12 (un grado è di circa 111.12 chilometri) quando si utilizza km, o lasciare la distanza in quanto è sull'utilizzo di laurea
$ centerSphere/$ nearSphere interroga
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$within" => {"$centerSphere" => [location, (distance.fdiv(6371))]}})
Questo troverà gli oggetti entro il raggio di 10 km. Qui abbiamo bisogno di convertire la distanza/6371 (raggio di terra) per farlo funzionare con km.
$ box (rettangolo di query)
first_loc = [80.24958300000003, 13.060422]
second_loc = [81.24958300000003, 12.060422]
items = Item.where(:loc => {"$within" => {"$box" => [first_loc, second_loc]}})
Questo vi aiuterà a trovare gli oggetti all'interno di un determinato rettangolo di selezione.
La risposta di RameshVel è eccezionale.
come aggiornamento, in Mongoid 3.0.4, ho dovuto definire l'indice come segue per farlo funzionare con rake db:mongoid:create_indexes
:
index(
{ loc: Mongo::GEO2D },
{ background: true }
)
In realtà questo non ha funzionato per me con 'Mongoid 3.0.0', la documentazione indica il seguente formato' index ({loc: "2d"}, {min: -200, max: 200}) '. Saluti. – rjgonzo
Tutte queste risposte sono una vecchia, con nuove versioni di MongoDB e getteranno alcuni uninitialized constant Mongo::GEO2D
Per mongoid 4/5, suggerisco di dare un'occhiata allo mongoid-geospatial gem se è necessario giocare con oggetti 2D o coordinate.
- 1. all'interno del meccanismo di indicizzazione geospaziale in mongodb
- 2. Query geospaziale MongoDB con $ non
- 3. Cluster geospaziale (MongoDB)
- 4. Elimina un campo in un documento in mongodb - Rails + Mongoide
- 5. MongoDB e Mongoide in produzione
- 6. MongoDB: combina ricerca testo e query geospaziale
- 7. MongoDB - Intersezione geospaziale di due poligoni
- 8. Alias di campo con Mongoide e Rotaie
- 9. Come eseguire il corretto test del database (TDD) su Rails 3 usando MongoDB e Mongoide
- 10. Supporto geospaziale in JPA
- 11. MongoDB con PostgreSQL in app One Rails
- 12. Data query in Mongoide
- 13. Instradamento geospaziale
- 14. Impossibile usare datetime_select con Mongoide
- 15. Upsert in Mongoide
- 16. DateTime con MongoDB/Mongoid e Rails 3 Non popolamento
- 17. Rails: Archivia JSON in MongoDB
- 18. Indicizzazione Postgres?
- 19. Come si esegue una query geospaziale in Mongo?
- 20. Combina MongoDB e Postgresql in Rails?
- 21. mysql indicizzazione parziale, indicizzazione inversa
- 22. Mongoide trova in modo ricorsivo il documento incorporato
- 23. Trovare tutti i documenti in una raccolta con Mongoide
- 24. Indicizzazione tensorflow con tensore booleano
- 25. indicizzazione logico con le liste
- 26. Scegliere tra embeds_many e references_many in Mongoide
- 27. Campo hash dinamico in Mongoide utilizzando i parametri forti
- 28. DLTK Indicizzazione in corso
- 29. Uso di MongoDB con Rails - Qualsiasi buono articolo?
- 30. Errore MongoDB con Mongoid, Heroku, Device, MongoHQ e Rails
Quando provo utilizzando $ nei pressi di comando (con maxDistance) restituisce un errore: valori geo devono essere numeri: {$ maxDistance: 0.001799856011519079, $ nei pressi di: [80,249, 13,060,422 mila]} Qualche idea? Funziona con solo "$ near" sul posto, ma quando aggiungo "$ maxDistance", soffoca. – Vasily
@Visamente, non sono sicuro .. la query $ vicino a $ maxdistance funziona perfettamente con i valori specificati. 'Item.where (: loc => {" $ near "=> [80.249, 13.060422], '$ maxDistance' => 0.001799856011519079})'. funziona bene. Potrebbe essere tu puoi mostrarmi la domanda che stavi cercando? vedremo quindi – RameshVel
Ho lo stesso errore quando uso maxDistance. Rubino 1.8. Ragazzi avete trovato una soluzione? –