MongoDB Aggregate-计数特定匹配字段的对象

时间:2019-04-12 11:54:30

标签: mongodb mongodb-query aggregation-framework

我想知道如何使用aggregate()获取特定字段的所有对象(即“用户”)并对其进行计数。

我在做什么:

我想返回一个用户列表,其中包含发了多少条推文?

所以我想要的输出看起来像

等等。

我也不想重复用户

等等。

上面的汇总就是这样做的。

因此,基本上,如何修改此聚合以确保对象唯一?

2 个答案:

答案 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进行汇总,例如:idid_str而不是问题中的$user对象。

db.tweets.aggregate([{ $group: {_id: "$user.id", totalTweets: { $sum: 1 }, user : { $push: "$user" }  }    }])

这将解决您的问题。有关$push运算符的详细信息,请查看官方文档$push