如何对同一集合中不同文档的值求和?
Posted
技术标签:
【中文标题】如何对同一集合中不同文档的值求和?【英文标题】:How can I sum values from different documents in the same collection? 【发布时间】:2021-04-01 00:29:01 【问题描述】:I have photos with an array of likes. I am using mongoose as a db. I want to sum all the numeric values in the likes count of photo collection.
exports.getAnalytics = (req, res) =>
if (!req.user)
return res.redirect('/login');
Campaign.findOne(slug:req.params.slug, (err, campaign) =>
PhotoEntries.find( CampaignId: campaign._id, ['Photo','Name', 'done' ,'likes_count', ], sort: _id: -1 , function(err, photos)
PhotoEntries.countDocuments(CampaignId: campaign._id , function (err, count)
PhotoEntries.aggregate([
$group:
_id: "$CampaignId",
Totallikes: $sum: "$likes_count"
])
if(req.user)
console.log(photos);
res.render('admin/analytics',
title: 'Analytics',
campaign: campaign,
photolist : photos,
Count:count ,
Totallikes: Totallikes
);
//
// ])
);
);
);
但是它不起作用。错误是Arguments must be aggregate pipeline operators.
我怎样才能做到这一点?
这是我的架构代码。
var photoSchema = 新架构(
名称:类型:字符串,
电子邮件:类型:字符串,
照片:类型:字符串,
说明:类型:字符串,
电话号码:类型:字符串,
活动 ID:
类型:Schema.Types.ObjectId,
ref: '广告系列',
,
done:
type: Boolean ,
,
likes_count: Number ,default: 0,
likedBy: [
type:Schema.Types.ObjectId,
ref: "User"
],
);
我需要将likes_count
字段添加到集合中的所有文档中。
【问题讨论】:
您能否在您的问题和预期结果中添加照片集架构。 你想做什么?您需要在集合中添加新字段吗?还是只需要通过聚合进行计数和检索?你的问题不清楚。 通过聚合只计算和检索 【参考方案1】:你错过了输入_id
,
按指定的_id
表达式对输入文档进行分组,对于每个不同的分组,输出一个文档。每个输出文档的_id
字段包含唯一的按值分组。更多信息请参考$group
PhotoEntries.aggregate([
$group:
_id: null,
Totallikes: $sum: "$likes_count"
])
Playground
【讨论】:
什么是id:null是什么意思,还是看不懂? 它需要输入,它将如何知道按此字段分组,您可以指定_id: "$CampaignId"
这将按该ID分组,--但现在我们需要对所有文档进行分组所以_id: null
这个将对所有文档进行分组。有关更多信息,请从答案中提供的 $group 链接中获取示例演示。
我添加了但无法将 Totallikes 变量发送到前端。它显示错误 Totallikes undefined
$match 阶段以上可能没有匹配文档,删除该阶段并重新测试。
我在上面编辑过,请查看完整路线以上是关于如何对同一集合中不同文档的值求和?的主要内容,如果未能解决你的问题,请参考以下文章
如何对 MongoDB 集合中字段的不同值求和(利用 mongoose)