gpt4 book ai didi

MongoDB GeoNear 聚合结果大小限制

转载 作者:可可西里 更新时间:2023-11-01 10:04:06 26 4
gpt4 key购买 nike

我正在使用 MongoDB 2.6.3 查询大量地理空间数据。具体来说,我正在查询中心位置几公里范围内所有 ping 的数据集,然后按用户标识符折叠它们以计算每个用户有多少 ping。

当然,我为此使用了 MongoDB 聚合,特别是 $geoNear 管道阶段。然而,看起来,即使在 2.6.0 中聚合返回一个游标,$geoNear 仍然对聚合返回文档时绑定(bind)的结果集的大小有限制。即,使用 $geoNear 的聚合仅返回 65,000 条记录,而等效(游标)查询返回 200,000 多条记录。

有人知道我如何使用 geoNear 执行大规模聚合吗?

编辑:示例文档:

{
"initial_epoch_time" : 1370062800,
"location" : [
-72.3458073902,
41.8241332683
],
"_id" : ObjectId("540a34050dc2520000912286"),
"__v" : 0
}

以下游标查询返回约 200,000 个文档的计数,我怀疑这是正确的数字:

 var cursor = db.pings.find( { location : { $near: { $geometry: { type: 'Point', coordinates: [-71.10560939999999, 42.3465666] }, $maxDistance: 10*1000 } } } )
var ctr = 0;
while(cursor.hasNext())
{ ctr++;
var ping = cursor.next()
}
print(ctr)

而以下基于聚合的查询:

 var cursor = db.pings.aggregate ( [ {$geoNear: { near: {type: "Point", coordinates:     [-71.10560939999999, 42.3465666]},limit: 100000000, spherical: true, maxDistance: 10*1000, distanceField: "distance"} } ] )
var ctr = 0;
while(cursor.hasNext())
{ ctr++;
var ping = cursor.next()
}
print(ctr)

返回约 65,000 个文档,无论 maxDistance 是多少。

最佳答案

$geoNear 作为命令对输出有 16MB 的文档限制。我发现您不会检索到任何错误,但文档会自动剪切到聚合的文档大小限制。您可以通过减少集合中文档的大小来进行测试。当您缩小集合的文档时,您将获得更多结果。

第 235 行: https://github.com/mongodb/mongo/blob/master/src/mongo/db/commands/geo_near_cmd.cpp

关于MongoDB GeoNear 聚合结果大小限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25789133/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com