db.getCollection("wallet").aggregate([
{
$group : {
_id : {$concat:["$usercode","-","$coinname"]},
usercode: { $max : "$usercode"},
coinname: { $max : "$coinname"},
count: { $sum : 1}
}
},
{
$sort: {
usercode: - 1
}
}
,
{
$match: {
count:{$gte:2}
}
}
]);
_id的内容决定了按什么分组,写成_id : {user:"$usercode", coin:"$coinname"} 分组效果一样,仅仅是显示的_id不同。
其查询结果如下:
如果需要关联其他表的数据,可以用$lookup,参考如下语句
db.getCollection("wallet").aggregate([
{$lookup:{
from:"user",
localField:"usercode",
foreignField:"usercode",
as:"user"
}}
,
{
$group : {
_id : {$concat:["$usercode","-","$coinname"]},
usercode: { $max : "$usercode"},
coinname: { $max : "$coinname"},
username: {$max: "$user.username"},
count: { $sum : 1}
}
}
,
{
$sort: {
usercode: - 1
}
}
,
{
$match: {
count:{$gte:2}
}
}
]);