sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB med Mongoid in Rails - Geospatial Indexing

Du kan definiera geoindex så här i mongoid

class Item
  include Mongoid::Document

  field :loc, :type => Array

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

  )
end

Och för frågor

$nära kommando (utan maxDistance)

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

$nära kommando (med maxDistance)

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

Konvertera avståndet med 111,12 (en grad är ungefär 111,12 kilometer) när du använder km, eller lämna avståndet som det är på med grader

$centerSphere / $nearSphere frågor

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

Detta kommer att hitta föremålen inom 10 km radie. Här måste vi konvertera avståndet/6371(jordens radie) för att få det att fungera med km.

$box (frågor med gränsruta)

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

Detta hjälper dig att hitta objekten inom den givna begränsningsrutan.



  1. Missbruka cURL för att kommunicera med Redis

  2. Hur kan jag använda en regex-variabel i en fråga för MongoDB

  3. Vad är en bra strategi för att gruppera liknande ord?

  4. Försenad exekvering / schemaläggning med Redis?