MongoDB多嵌套数组大小统计:诗歌集各诗歌的幕与场次计数求助
解决MongoDB诗歌集合的幕与场次统计问题
别担心,我来帮你搞定这个统计需求!首先得先明确下你的poems集合中文档的嵌套结构——我先假设是最常见的场景:每首诗文档里包含一个acts数组,每个act对象又嵌套了scenes数组(如果你的实际结构有差异,随时补充细节我再调整方案)。
聚合查询实现统计
直接用MongoDB的聚合管道就能精准统计每首诗对应的幕数和总场次,给你写好示例代码:
db.poems.aggregate([ // 新增字段计算幕数和总场次 { $addFields: { act_count: { $size: "$acts" }, // 统计acts数组长度,就是幕的数量 total_scenes: { $sum: { $map: { input: "$acts", as: "single_act", in: { $size: "$$single_act.scenes" } // 遍历每个幕,统计其场次数量后求和 } } } } }, // 可选:筛选保留需要的字段(比如诗歌标题、幕数、总场次) { $project: { _id: 0, title: 1, act_count: 1, total_scenes: 1 } } ])
关键逻辑说明
$size:MongoDB专门用来获取数组长度的操作符,直接对$acts使用就能得到这首诗的幕数;$map+$sum:先遍历每一个幕,计算该幕下scenes数组的长度(也就是单幕的场次数量),再用$sum把所有幕的场次数量加总,得到整首诗的总场次;- 如果你的文档结构不同(比如每个
act里直接存了scene_count数字字段,而不是scenes数组),那总场次可以简化成$sum: "$acts.scene_count",更高效。
要是你之前的查询结果不对,可以把你写过的代码或者实际的文档结构片段贴出来,我帮你排查问题!
内容的提问来源于stack exchange,提问作者Konstantin Chsherbakov
相关产品推荐
相关产品推荐

