我正在运行 geoNear 查询作为MongoDB聚合管道的一部分,我似乎无法将maxDistance设置得足够大,以便返回所有结果。
我有大约30000个文档的集合,所有文档都具有有效的地理位置(格式为[lng , lat]
),而且最多只能获得大约9或1万个文档。
当我在mongo shell中运行以下查询时,我得到的计数约为9000:
db.myCollection.aggregate(
[{"$geoNear": {"near" : {"type" : "Point",
"coordinates": [-0.1, 50.5]},
"distanceField": "data.distance",
"spherical": true,
"maxDistance":100000000
"limit":100000}}],
{"cursor": {"batchSize": 100000000}}).itcount() // => ~9000
注意,我已将 maxDistance 设置为大于地球的周长(我使用GeoJSON Point so maxDistance is in meters)。我还确保限制和 batchSize 都大于我的集合中的文档数量。
当作为 find 查询运行时,我得到集合中完整文档数的计数。即。
db.myCollection.find({"data.location":
{$near: {$geometry: {type: "Point",
coordinates: [-0.1, 50.5]},
$maxDistance: 100000000}}}).count() // => ~30000
我还注意到,当更改坐标的值进行搜索时,尽管指定了一个应包含所有内容的maxDistance,但我会收到不同数量的文档。
我已经使用MongoDB的3.2.6和3.0.11版本重现了这种行为。
我不知道聚合查询的maxDistance值是否有上限?或者还有其他限制返回文件数量的东西?我还没有找到任何这些方案的文档。