sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB med Mongoid i skinner - Geospatial indeksering

Du kan definere geoindekser som dette i mongoid

class Item
  include Mongoid::Document

  field :loc, :type => Array

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

  )
end

Og for forespørgsler

$near kommando (uden maxDistance)

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

$near kommando (med maxDistance)

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

Konverter distance med 111,12 (en grad er ca. 111,12 kilometer), når du bruger km, eller lad afstanden være som den er ved brug af grad

$centerSphere / $nearSphere forespørgsler

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

Dette vil finde emnerne inden for en radius på 10 km. Her skal vi konvertere afstanden/6371(jordens radius) for at få det til at fungere med km.

$box (afgrænsningsrammeforespørgsler)

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

Dette vil hjælpe dig med at finde emnerne inden for den givne afgrænsningsramme.



  1. $unset er tom. Du skal angive et felt som sådan:{$unset:{<field>:...}}

  2. Mongodb undgå duplikerede poster

  3. MongoDB $weeklyUpdate #65 (15. april 2022):GDELT, Mongoose, &Hackathon Time!

  4. Sådan bruger du $push update modifier i MongoDB og C#, når du opdaterer et array i et dokument