sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB s Mongoidem v Rails - Geoprostorové indexování

Geo indexy můžete definovat takto v mongoidu

class Item
  include Mongoid::Document

  field :loc, :type => Array

  index(
      [
          [:loc, Mongo::GEO2D]             
      ], background: true

  )
end

A pro dotazy

$blízko příkaz (bez maxDistance)

 location = [80.24958300000003, 13.060422]
 items = Item.where(:loc => {"$near" => location})

$blízko příkaz (s maxDistance)

 distance = 10 #km
 location = [80.24958300000003, 13.060422]
 items = Item.where(:loc => {"$near" => location , '$maxDistance' => distance.fdiv(111.12)})

Převeďte vzdálenost o 111,12 (jeden stupeň je přibližně 111,12 kilometrů) při použití km, nebo ponechte vzdálenost tak, jak je při použití stupně

$centerSphere / $nearSphere dotazy

location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$within" => {"$centerSphere" => [location, (distance.fdiv(6371) )]}})

To najde položky v okruhu 10 km. Zde musíme převést vzdálenost/6371 (poloměr Země), aby to fungovalo s km.

$box (dotazy na ohraničující rámeček)

 first_loc = [80.24958300000003, 13.060422]
 second_loc = [81.24958300000003, 12.060422]
 items = Item.where(:loc => {"$within" => {"$box" => [first_loc, second_loc]}})

To vám pomůže najít položky v daném ohraničovacím rámečku.



  1. MongoDB C# Driver 2.0 - Aktualizace dokumentu

  2. Nainstalujte MongoDB Community Edition 4.0 na Linux

  3. Získejte celkový počet dokumentů s MongoDB při použití limitu

  4. Index v MongoDB