0

MongoidやMongoMapperなどのORMラッパーなしでrubyドライバーを使用してmongodbにバウンディングボックスジオクエリを発行する方法を理解しようとしています。

nearコマンドは問題なく実行できますが、withinを含むfindの構文を理解できないようです。

したがって、半径内でクエリを実行する場合、これは魅力のように機能します

conn = Mongo::Connection.from_uri('my DB')
  db = conn.db('my_sites')
  coll = db.command({'geoNear' => "sites",
             'near'=>[lng,lat],
             'spherical' => true,
             'maxDistance' => distance_in_radians,
             'num' => limit})
  render :json => coll['results'].to_a

しかし、私は次の範囲内でクエリを正しく取得することに困惑しています。

box = [[34.05,-118.24],[35.80,116.44]]
coll = db.command({'within' => "sites", 'box' => box}

また

db['my_sites']
coll = db.find({"box" => box})

mongoクライアントで直接クエリを発行できますが、rubyドライバーの構文を理解するのにつまずきました。

4

1 に答える 1

0

私の知る限り、MongoDB シェル バージョンは次のようになります。

db.my_sites.find(loc: { $within: { $box: box } })

低レベルの Ruby インターフェースは一般に JavaScript インターフェースを反映しているため、次のことが必要になると思います。

db['my_sites'].find(:loc => { :$within => { :$box => box } })

ジオ対応のコレクションが手元にないため、テストして確認することはできません。

于 2012-04-24T01:56:55.837 に答える