如何统计MotherCard集合中列表内每部电影的文档数量?
统计MongoDB集合中指定电影各自的文档数量
你当前的代码用countDocuments配合$in,会返回所有匹配列表中任意电影的文档总数量,而非每部电影的独立计数。如果你的代码仅返回第一个元素的数量,大概率是数据或环境的特殊情况,但要实现「统计列表中每部电影各自的文档数」,正确方案是使用MongoDB的聚合框架:
const list = ['Frozen 2013', 'Oblivion 2013', 'Avatar 2009']; const movieCounts = await db.MotherCard.aggregate([ // 过滤出列表内的电影文档 { $match: { movie: { $in: list } } }, // 按movie字段分组,统计每组的文档数量 { $group: { _id: '$movie', count: { $sum: 1 } } }, // 可选:将_id重命名为movie,让结果结构更直观 { $project: { movie: '$_id', count: 1, _id: 0 } } ]); console.log(movieCounts);
这段代码会返回一个数组,每个元素对应一部电影的名称及对应的文档数,示例输出:
[ { movie: 'Frozen 2013', count: 15 }, { movie: 'Oblivion 2013', count: 8 }, { movie: 'Avatar 2009', count: 22 } ]
如果需要结果顺序和原列表完全一致,且包含无匹配文档的电影(count为0),可以在聚合后补充排序逻辑:
// 按原列表顺序整理结果 const orderedCounts = list.map(movieName => { const matchedItem = movieCounts.find(item => item.movie === movieName); return { movie: movieName, count: matchedItem ? matchedItem.count : 0 }; }); console.log(orderedCounts);
内容的提问来源于stack exchange,提问作者Raol mAX
相关产品推荐
相关产品推荐

