Mgo统计查询及显示附加字段


MongoDB统计查询

$group基本操作:

  • _id:分组字段的集合
  • $sum:使用$+字段名为求和(字符串忽略);
    • 1为每组的条数;
    • 可以在$sum中多个字段进行运算,得出成为新字段的结果
  • $addToSet:将分组内的某个字段加入一个集合中,无重复值,$push会重复
  • $unwind:用于拆分数组,当addToSet后是一个集合,为了更直观显示可用此拆分
db.table_a.aggregate([{
    $group:{
        _id:{player_id:"$player_id", channel:"$channel"},
        count : {"$sum": 1},
        amount : {"$sum": "$amount"},
        success: {"$sum": "$success"},
        fail : {"$sum": "$fail"},
        player_id: {"$addToSet": "$player_id"},
        channel : {"$addToSet": "$channel"}
    },{
        $unwind:"$player_id"
    },{
       $unwind:"$channel"
      }
])

Mgo操作

在golang中求和之后想在每一列中增加某些字段的值,所以要用上$push,$addToSet。但是用上这两个关键字后所得到的数据是个是个切片。为了更简单的与proto结构关联起来,所以要加上$unwind来拆分。注:我此时所要的附加字段是分组的字段,因此不会有重复求和的结果。

//go
findBson := bson.M{}
groupBson := bson.M{"_id": bson.M{"player_id": "$player_id", "channel": "$channel"},
		"count":      bson.M{"$sum": 1},
		"amount":     bson.M{"$sum": "$amount"},
		"success":    bson.M{"$sum": "$success"},
        "fail":       bson.M{"$sum": "$fail"},
        "player_id":  bson.M{"$addToSet": "$player_id"},
		"channel":    bson.M{"$addToSet": "$channel"},
}
//查询聚合数据条件
m := []bson.M{
	{"$match": findBson},
	{"$group": groupBson},
	{"$unwind": "$PlayerId"},
	{"$unwind": "$Channel"},
}

var data []*XXX // proto结构体
query = col.Pipe(m)
query.All(&data)
//proto

//用户注单统计数据
message XXX{
	optional int64 player_id= 1;
	optional string channel = 2;
    optional int64 amount =3;
    optional int64 success= 4;
    optional int64 fail=5;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值