Mongo查询group by并只输出大于1的小计

ang*_*okh 1 mongodb mongodb-query aggregation-framework

我正在尝试按用户和电子邮件进行分组,并且仅输出小计> 1。我尝试了此操作,但编译失败。

db.member.aggregate( 
{"$group" :  {
   _id : {user:"$user", email: "$email"}, 
   count : { $sum : { if: { $gte: [ "$sum", 1 ] }, then: 1, else: 0 } 
} } } )
Run Code Online (Sandbox Code Playgroud)

Bla*_*ven 5

您不必尝试将所有内容都放入一个$group阶段中。它是一个聚合“管道”,应该这样使用。就在$match最后的a:

db.member.aggregate([
    { "$group": {
        "_id": { "user": "$user", "email": "$email" },
        "count": { "$sum": 1 }
    }},
    { "$match": { "count": { "$gte": 1 } } }
])
Run Code Online (Sandbox Code Playgroud)

无论如何,它基本上是必需的,因为“首先”你积累,然后你过滤。很像SQL 中的GROUP BYand HAVING

另请参阅核心文档中的SQL 到聚合映射图表以获取常见示例。