0

我试图弄清楚如何使用没有像 Mongoid 或 MongoMapper 这样的 ORM 包装器的 ruby​​ 驱动程序向 mongodb 发出边界框地理查询。

我可以执行附近的命令没问题,但我似乎无法弄清楚 find with a inside 的语法。

所以如果我想在半径范围内查询,这就像一个魅力

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

AFAIK,MongoDB shell 版本看起来像这样:

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

低级 Ruby 接口通常反映 JavaScript 接口,所以我认为你想要:

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

我手边没有地理就绪的集合,所以我无法对其进行测试以确保。

于 2012-04-24T01:56:55.837 回答