如何在 mongoid dsl 中编写 mongodb $near 查询?
Posted
技术标签:
【中文标题】如何在 mongoid dsl 中编写 mongodb $near 查询?【英文标题】:how to write mongodb $near query in mongoid dsl? 【发布时间】:2015-01-06 10:25:50 【问题描述】:我有这个 mongodb 查询,如果可能的话,我想用 mongoid dsl 编写它
db.pokemons.find(
target_region :
$near :
$geometry: type: "Point", coordinates: [-80.190262, 25.774252] ,
$minDistance: 1110,
$maxDistance: 5000
)
【问题讨论】:
你可能想探索mongoid.org/en/mongoid/v3/querying.html#geo_near 【参考方案1】:假设您通过 params[:coordinates] 获取坐标
clocation = params[:coordinates].split(",").map(&:to_f)
max_distance = params[:max_distance].to_i
min_distance = params[:min_distance].to_i
如果您想通过 point
进行测量,请使用此
Pokemon.where(:target_region => "$near" => clocation , '$maxDistance' => max_distance, '$minDistance' => min_distance)
如果您想通过 miles
进行测量,请使用此
Pokemon.where(:target_region => "$near" => clocation , '$maxDistance' => max_distance.fdiv(69), '$minDistance' => min_distance.fdiv(69))
如果您想通过 kilometers
进行测量,请使用此
Pokemon.where(:target_region => "$near" => clocation , '$maxDistance' => max_distance.fdiv(111.12), '$minDistance' => min_distance.fdiv(111.12))
【讨论】:
不工作@skip=0 @limit=0 @selector="target_region"=>"$near"=>[-80.190262, 25.774252], "$maxDistance"=>5000000, :isNearSphere=>true @fields=nil> failed with error 17007: "Unable to execute query: error processing query: ns=mobadz_development.campaigns limit=0 skip=0\nTree: GEONEAR field=target_region maxdist=5e+006 isNearSphere=0\nSort: \nProj: \n planner returned error: unable to find index for $geoNear query" See https://github.com/mongodb/mongo/blob/master/docs/errors.md for details about this error.
不适合我。它给了我上述错误Pokemon.where(:target_region => "$near" => clocation , '$maxDistance' => 5000000)
我确实在 :target_region 字段上创建了索引db.campaigns.ensureIndex(target_region : "2dsphere")
你在Pokemon
模型中使用了index(target_region: "2d")
吗?
你的字段也应该这样声明。 field :target_region, type: Array, :default => [] # [lat,lng]
是的,我也试过“2d”索引。我的字段是geoJSON,声明为field :target_region, type: hash # type:"Polygon", coordinates: [[ [log,lat], [long,lat] ] ]
【参考方案2】:
我认为你应该使用
Pokemon.geo_near([-80.190262, 25.774252]).min_distance(1110).max_distance(5000)
还可以查看 The mongoid docs 以供参考 http://mongoid.org/en/mongoid/docs/querying.html#geo_near
【讨论】:
以上是关于如何在 mongoid dsl 中编写 mongodb $near 查询?的主要内容,如果未能解决你的问题,请参考以下文章