MongoDB聚合创建临时集合后countDocuments返回0但终端计数正常
问题原因
核心是MongoDB Node.js驱动的aggregate方法返回的是游标(Cursor)实例而非直接返回Promise:
- 单纯
await maincollection.aggregate(...)只会等待游标对象创建完成,不会触发整个聚合流水线的执行。$out阶段需要游标完成全量迭代才会执行实际的新集合写入操作,你在写入未完成时就调用countDocuments自然返回0。 - 你手动在终端查询时距离代码执行已经有足够的间隔,后台写入操作已经完成,所以能返回正确的计数。
修复方案
在聚合调用后追加.toArray()方法,强制消费游标,等待$out阶段的写入操作完全结束再执行后续的计数逻辑:
// 修正后的聚合写入代码 await maincollection.aggregate([ { $skip: 2 }, { $limit: 5 }, { $out: newcollection } ]).toArray(); // 此时计数可以返回正确结果 await newcollection.countDocuments()
内容的提问来源于stack exchange,提问作者user13000875
相关产品推荐
相关产品推荐

