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
相关产品推荐
相关产品推荐

