我想知道如何使用aggregate()获取特定字段的所有对象(即“用户”)并对其进行计数。
我在做什么:
我想返回一个用户列表,其中包含发了多少条推文?
所以我想要的输出看起来像
等等。
我也不想重复用户
等等。
上面的汇总就是这样做的。
因此,基本上,如何修改此聚合以确保对象唯一?
答案 0 :(得分:1)
我相信您将希望按user.id字段而不是用户对象进行分组。您可以尝试直接这样做
$group: {_id: "$user.id", totalTweets: {$sum: 1} }
或者您可能希望在分组之前将该字段投影到文档上
$addFields: {userId: "$user.id"}
$group: {_id: "$userId", totalTweets: {$sum: 1} }
答案 1 :(得分:0)
如果要在汇总后在每个文档中使用整个内部 user 对象,则必须在汇总中使用$push
运算符
并且还需要根据用户的唯一ID进行汇总,例如:id
或id_str
而不是问题中的$user
对象。
db.tweets.aggregate([{ $group: {_id: "$user.id", totalTweets: { $sum: 1 }, user : { $push: "$user" } } }])
这将解决您的问题。有关$push
运算符的详细信息,请查看官方文档$push