我的 mongodb 集合中有名为 Flight
的源字段和目标字段。这两个字段均按地理空间索引并以经纬度格式编写。我正在使用 mongomapper 从 Rails Controller 查询它。
我想编写如下查询。
Result= Flight.where(:source => {'$near' => location_src} , :destination => {'$near' => location_dest} )
其中location_src和location_dest是经纬度格式的GUI输入。
但是,当我尝试通过编写 Result.first
或 Result.all
访问结果时,它说
Mongo::OperationFailure:不能有 2 个特殊字段
。
任何人都可以建议我解决方法吗?
亲切的问候, 阿姆里什。
最佳答案
我找到了一个简单的解决方法,它可以满足我的目的,并且可能对面临类似情况的人有所帮助。
虽然mongodb不支持同时对多个字段进行地理空间查询,但它仍然支持同时对多个字段进行地理空间索引。因此,我们将依次对这两个字段运行查询,如下所示。
- start_place:起始地点的名称
- start_place_loc:起始位置的坐标(索引地理空间字段)
- end_place:目的地名称
- end_place_loc:目标位置的坐标(索引地理空间字段)
以下是示例代码。
tmp=Flight.distinct(:start_place,:start_place_loc => {'$near' => location_src} )
Result=Flight.where(:start_place_loc => {'$near' => location_src} , :start_place => {'$in' => tmp})
此外,还需要根据自己的要求设置 '$maxDistance' => "value"。
关于mongodb - 使用地理空间索引查询源和目的地 mongodb mongomapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12509013/