我在名为Flight
的 mongodb 集合中有源和目标字段。这两个字段都是地理空间索引并以lat-long格式编写。我正在使用mongomapper从rails控制器中查询它。
我想写一个如下的查询。
Result= Flight.where(:source => {'$near' => location_src} , :destination => {'$near' => location_dest} )
其中location_src和location_dest是lat-long格式的gui输入。
但是,当我尝试通过撰写Result.first
或Result.all
来访问结果时,它就是这么说的
Mongo::OperationFailure: can't have 2 special fields
。
任何人都可以向我建议可能的解决方法吗?
亲切的问候, Amrish。
答案 0 :(得分:1)
目前,Mongodb每个集合仅支持1个地理索引。记录来自this page
目前,每个集合可能只有1个地理空间索引。而 MongoDB可能允许创建多个索引,这种行为是 不支持的。因为MongoDB只能使用一个索引来支持 在大多数情况下,单个查询将产生多个地理索引 不良行为。
答案 1 :(得分:0)
@Amrish
目前mongodb每个集合只能有一个2d索引,但是你可以拥有多位置文档。
地址: [ {loc:[Lon,Lat],//或{lon:“somevalue”,lat:“somevalue”} 名称:“开始” },
{loc:[Lon,Lat],//或{lon:“somevalue”,lat:“somevalue”} 名称:“结束” }, ]
你可以在Address.loc上有2d索引
这可以帮助$ near和geoNear进行搜索,并且可以用于搜索解决方法查找给定lat-lng对附近的所有“开始”点
还要注意:它应该是(长,纬)对不反转。
答案 2 :(得分:0)
看起来SO有zig-zag的例子
很快,把(lng,lat)对,名称:start或name:end。 制作上面的一对数组 将2d Index放在上面的数组上。
这可以帮助您查询找到给定(lng,lat)对附近的所有起点。 这可以帮助您查询找到给定(lng,lat)对附近的所有终点。
你应该能够对上述两个操作使用AND / OR等操作