我的MongoDB集合中有名为Flight的源和目标字段。这两个字段都是地理空间索引的,并以lat-long格式编写。我正在使用mongomapper从rails控制器查询它。
我想写一个如下的查询。

Result= Flight.where(:source => {'$near' =>  location_src} , :destination => {'$near' => location_dest} )

其中location_src和location_dest是采用长格式的gui输入。
但是,当我试图通过编写Result.firstResult.all来访问结果时,它会说
Mongo::OperationFailure: can't have 2 special fields
有人能告诉我解决办法是什么吗?
谨致问候,
阿姆利什。

最佳答案

我找到了一个简单的解决方法,它符合我的目的,可能对面临类似情况的人有帮助。
虽然MongoDB不支持同时对多个字段进行地理空间查询,但仍然支持同时对多个字段进行地理空间索引。因此,我们将对这两个字段逐个运行查询,如下所示。
起始地:起始地名称
起始位置:起始位置的坐标(索引的地理空间字段)
终点:目的地名称
结束位置:目标位置的坐标(索引的地理空间字段)
下面是示例代码。

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”=>“值”。

关于mongodb - 使用地理空间索引mongodb mongomapper查询源和目标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12509013/

10-09 20:55