You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB遍历集合执行聚合查询无输出问题求助

MongoDB遍历集合执行聚合查询无输出问题求助

嗨,我来帮你排查这个问题~

你遇到的情况其实很常见:当你在forEach的回调函数里执行聚合查询时,Mongo Shell不会像直接在控制台单独执行那样自动输出结果,这就是为什么单独跑聚合没问题,但循环里没任何输出的核心原因。

解决方法很简单,只需要在聚合查询之后主动打印结果就行,具体可以这样修改你的代码:

db = db.getSiblingDB("database_test");

var col = ["col1","col2"];

col.forEach(function(col_name){
    // 把聚合结果赋值给变量
    let aggResult = db.getCollection(col_name).aggregate(
        [
            {
                "$group" : {
                    "_id" : null,
                    "max" : {"$max" : {"$bsonSize" : "$$ROOT"}},
                    "min" : {"$min" : {"$bsonSize" : "$$ROOT"}},
                    "avg" : {"$avg" : {"$bsonSize" : "$$ROOT"}},
                    "total" : {"$sum" : {"$bsonSize" : "$$ROOT"}}
                }
            },
            {
                "$project" : {
                    "_id" : 0,
                    "max" : 1,
                    "min" : 1,
                    "avg" : 1,
                    "total_size" : "$total",
                    "record_count" : {"$divide" : ["$total", "$avg"]}
                }
            }
        ],
        {"allowDiskUse" : false}
    );
    // 打印当前集合的聚合结果,还可以加个集合名标识更清晰
    print(`--- 集合 ${col_name} 的文档大小统计结果 ---`);
    aggResult.forEach(doc => printjson(doc));
});

如果你想更简洁,也可以直接在聚合查询后链式调用打印逻辑:

db.getCollection(col_name).aggregate([...]).forEach(doc => printjson(doc));

这样修改后,每次循环执行完聚合,就会把对应集合的统计数据输出到控制台了。

备注:内容来源于stack exchange,提问作者MKG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 10:44:07