zoukankan      html  css  js  c++  java
  • golang mongo-driver Aggregate

    分组计算

    // ListGroupByUser group by user
    func (repo PostReadRepository) ListGroupByUser(postUID string) (list []*model.PostRead, err error) {
    	ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
    	defer cancel()
    	pipeline := []bson.M{bson.M{"$group": bson.M{"_id": bson.M{"postuid": "$postuid", "createdby": "$createdby"},
    		"createdon": bson.M{"$max": "$createdon.t"}, "uid": bson.M{"$max": "$_id"}, "readtime": bson.M{"$sum": "$readtime"}}}}
    	opts := options.Aggregate()
    	cur, err := dbPostRead.Aggregate(ctx, pipeline, opts)
    	defer cur.Close(ctx)
    
    	for cur.Next(ctx) {
    		var doc map[string]interface{}
    		cur.Decode(&doc)
    		createdOn, _ := time.ParseInLocation("2006-01-02T15:04:05", doc["createdon"].(string), time.Local)
    		read := &model.PostRead{
    			UID:       doc["uid"].(string),
    			PostUID:   doc["_id"].(map[string]interface{})["postuid"].(string),
    			ReadTime:  doc["readtime"].(int64),
    			CreatedOn: mask.Timestamp{Time: createdOn},
    			CreatedBy: doc["_id"].(map[string]interface{})["createdby"].(string),
    		}
    		read.User = proxy.GetUserInfo(read.CreatedBy)
    
    		list = append(list, read)
    	}
    	return
    }
    
  • 相关阅读:
    iOS 上线流程
    静态库和动态库的区别
    iOS如何生成.a文件
    苹果公司软件
    iOS 的主要框架
    多线程图解
    判断屏幕横屏/竖屏
    最大堆构建和堆排序
    hadoop2.6.0 + hbase-1.0.0 伪分布配置
    centos6 名字服务dnsmasq配置
  • 原文地址:https://www.cnblogs.com/warrior/p/12152635.html
Copyright © 2011-2022 走看看