在集合上使用近查询时遇到了几个问题。
我正在使用2dsphere索引,并希望靠近地点和分页。 我注意到的第一件事是偏移不在附近。所以这应该很容易用min / maxDistance模拟
但我无法弄清楚如何使工作查询minDistance,而maxDistance似乎无效。
以下是我正在使用的命令:
db.Place.runCommand({ "geoNear": "Place", "near": [ 49, 14 ], "spherical": true, "query": [ ], "distanceMultiplier": 6378.137, "minDistance": 60 });
db.Place.runCommand({ "geoNear": "Place", "near": [ 49, 14 ], "spherical": true, "query": [ ], "distanceMultiplier": 6378.137 });
db.Place.runCommand({ "geoNear": "Place", "near": [ 49, 14 ], "spherical": true, "query": [ ], "distanceMultiplier": 6378.137, "maxDistance": 60 });
设置minDistace时会输出0结果,输入的数字并不重要。同样在统计数据中是nscanned 1,这是错误的,应该是299,这是索引中的文档数。
和3.将输出100个完全相同的结果(当序列化实体很大时这也是问题而且我不需要的100个结果很慢)并且nscanned是299。
这是我的索引:
{
"v" : 1,
"name" : "coordinates_2dsphere",
"ns" : "mydb.Place",
"sparse" : false,
"2dsphereIndexVersion" : 3
}
我正在使用DoctrineODM和mongodb 3.2.6
答案 0 :(得分:0)
发现此查询仅在使用GeoJson点时有效。
文档说不然:( https://docs.mongodb.com/manual/reference/operator/query/near/#op._S_near
这是工作命令:
db.Place.runCommand({ "geoNear": "Place", "near": { "type": "Point", "coordinates": [ 49, 14 ] }, "spherical": true, "query": [ ], "distanceMultiplier": 0.001, "maxDistance": 70000, "minDistance": 10000 });
唯一的区别是GeoJson以米为单位工作。