sql >> データベース >  >> NoSQL >> MongoDB

RailsにMongoidを搭載したMongoDB-地理空間インデックス

    このようなジオインデックスをモンゴイドで定義できます

    class Item
      include Mongoid::Document
    
      field :loc, :type => Array
    
      index(
          [
              [:loc, Mongo::GEO2D]             
          ], background: true
    
      )
    end
    

    そしてクエリの場合

    $ near コマンド(maxDistanceなし)

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

    $ near コマンド(maxDistanceを使用)

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

    kmを使用する場合は、距離を111.12(1度は約111.12 km)で変換するか、度を使用する場合は距離をそのままにします

    $ centerSphere / $ nearSphere クエリ

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

    これにより、半径10km以内のアイテムが見つかります。ここでは、距離/ 6371(地球半径)をkmで機能させるために変換する必要があります。

    $ box (バウンディングボックスクエリ)

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

    これは、指定されたバウンディングボックス内のアイテムを見つけるのに役立ちます。



    1. SpringDataMongoDB-カスタムIDフィールドで使用している間はアノテーション@CreatedDateが機能しません

    2. MongoDB $ dateToString

    3. MongoDBユーザー管理の概要

    4. 高可用性のためにMongoDBをデプロイする方法