gpt4 book ai didi

mongodb - Mongodb $geoNear 查询 - 不正确的扫描数字和不正确的结果

转载 作者:可可西里 更新时间:2023-11-01 09:15:12 24 4
gpt4 key购买 nike

我有一个包含大约 6k 文档的集合,位置字段上有 2dsphere 索引,示例如下:

"location" : {
"type" : "Point",
"coordinates" : [
138.576187,
-35.010441
]
}

当使用下面的查询时,我只得到大约 450 个 nscanned 返回的文档,大约 3k。每个文档都有一个位置,许多位置都是重复的。从 GeoJSON 返回的距离以米为单位,距离乘数 0.000625 会将距离转换为英里。为了测试,我期望最大距离为 32180000000000 以返回地球上的所有文档,即 6000

db.x.aggregate([
{"$geoNear":{
"near":{
"type":"Point",
"coordinates":[-0.3658702,51.45686]
},
"distanceField":"distance",
"limit":100000,
"distanceMultiplier":0.000625,
"maxDistance":32180000000000,
"spherical":true,
}}

])

为什么我没有收到 6000 份文件?我无法从 Mongo 中找到这种行为背后的逻辑。我在 mongo 论坛上发现:“geoNear 的主要局限性在于,作为一个命令,它可以返回一个设置为最大文档大小的结果,因为所有匹配的文档都在一个结果文档中返回。”

最佳答案

我很确定 mongodb 对 $GeoNear 的结果有 16 MB 的限制。在 https://github.com/mongodb/mongo/blob/master/src/mongo/db/commands/geo_near_cmd.cpp可以看到在构建geonear的结果的同时,有这个条件

// Don't make a too-big result object.
if (resultBuilder.len() + resObj.objsize()> BSONObjMaxUserSize) {
warning() << "Too many geoNear results for query " << rewritten.toString()
<< ", truncating output.";
break;
}

并且在 https://github.com/mongodb/mongo/blob/master/src/mongo/bson/util/builder.h您会看到它限制为 16 MB。

const int BSONObjMaxUserSize = 16 * 1024 * 1024;

关于mongodb - Mongodb $geoNear 查询 - 不正确的扫描数字和不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30155393/

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