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
    }
    
  • 相关阅读:
    Web 请求响应原理(转)
    openstack中的floating ip与阿里云的公网ip
    一起来说 Vim 语
    vsftpd.conf 详解与实例配置
    jquery 放大图片
    jQuery 之 .stop() 方法
    jquery 插件开发
    jquery 之效果
    jquery 之事件 多库共存(noConflict)
    测试网站是共享还是独立ip
  • 原文地址:https://www.cnblogs.com/warrior/p/12152635.html
Copyright © 2011-2022 走看看