我正在尝试按用户和电子邮件分组,只输出小计>我尝试了这个但是编译失败了。
db.member.aggregate(
{"$group" : {
_id : {user:"$user", email: "$email"},
count : { $sum : { if: { $gte: [ "$sum", 1 ] }, then: 1, else: 0 }
} } } )
答案 0 :(得分:3)
您不必尝试将所有内容都放入单个$group
阶段。它是一个聚合“管道”,应该这样使用。就在最后$match
处:
db.member.aggregate([
{ "$group": {
"_id": { "user": "$user", "email": "$email" },
"count": { "$sum": 1 }
}},
{ "$match": { "count": { "$gte": 1 } } }
])
无论如何,它基本上是必需的,因为你积累了“第一个”,然后你过滤了。与SQL中的GROUP BY
和HAVING
非常相似。
另请参阅核心文档中的SQL To Aggregation Mapping Chart以获取常见示例。