• go insert mongo find mongo


    func (conno *ConnoInfo) InsertConno() (interface{}, error) {
    
        ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
        collection_ex := beego.AppConfig.String("mongodb::mongodb_collection_ex")
    
        conno.ID = primitive.NewObjectID()
        //primitive.NewDateTimeFromTime(time.Now())
    
        conno.Ts = date_utils.JsonTime(time.Now())
    
        result, err := mongodb.Conn().Collection(fmt.Sprintf("%s%s", strings.ToLower(collection_ex), strings.ToLower(conno.Carriercd))).InsertOne(ctx, conno)
    
        objectID := result.InsertedID.(primitive.ObjectID)
    
        if err != nil {
            return nil, err
        }
    
        return objectID.Hex(), nil
    
    }

    common.go

    package date_utils
    
    import (
        "errors"
        "fmt"
        "go.mongodb.org/mongo-driver/bson"
        "go.mongodb.org/mongo-driver/bson/bsontype"
        "go.mongodb.org/mongo-driver/bson/primitive"
        "go.mongodb.org/mongo-driver/x/bsonx/bsoncore"
        "time"
    )
    
    type JsonTime time.Time
    
    const (
        timeFormart = "2006-01-02 15:04:05"
    )
    
    func Now() JsonTime {
        return JsonTime(time.Now())
    }
    
    //实现json反序列化,从传递的字符串中解析成时间对象
    func (t *JsonTime) UnmarshalJSON(data []byte) (err error) {
    
        if string(data) == "null" {
            return nil
        }
    
        now, err := time.ParseInLocation(`"`+timeFormart+`"`, string(data), time.Local)
        *t = JsonTime(now)
        return
    }
    
    //实现json序列化,将时间转换成字符串byte数组
    func (t JsonTime) MarshalJSON() ([]byte, error) {
        b := make([]byte, 0, len(timeFormart)+2)
        b = append(b, '"')
        b = time.Time(t).AppendFormat(b, timeFormart)
        b = append(b, '"')
        return b, nil
    }
    
    //mongodb是存储bson格式,因此需要实现序列化bsonvalue(这里不能实现MarshalBSON,MarshalBSON是处理Document的),将时间转换成mongodb能识别的primitive.DateTime
    func (t *JsonTime) MarshalBSONValue() (bsontype.Type, []byte, error) {
        targetTime := primitive.NewDateTimeFromTime(time.Time(*t))
        return bson.MarshalValue(targetTime)
    }
    
    //实现bson反序列化,从mongodb中读取数据转换成time.Time格式,这里用到了bsoncore中的方法读取数据转换成datetime然后再转换成time.Time
    func (t *JsonTime) UnmarshalBSONValue(t2 bsontype.Type, data []byte) error {
        v, _, valid := bsoncore.ReadValue(data, t2)
        if valid == false {
            return errors.New(fmt.Sprintf("%s, %s, %s", "读取数据失败:", t2, data))
        }
        *t = JsonTime(v.Time())
        return nil
    }
    func (conno *ConnoInfo) GetConno(scac string) interface{} {
    
        ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
        //err := mongodb.Conn().FindOne(ctx, ConnoInfo{ID: conno.ID}).Decode(&conno)
        filter := bson.D{{"_id", conno.ID}}
        collection_ex := beego.AppConfig.String("mongodb::mongodb_collection_ex")
    
        err := mongodb.Conn().Collection(fmt.Sprintf("%s%s", strings.ToLower(collection_ex), strings.ToLower(scac))).FindOne(ctx, filter).Decode(&conno)
    
        if err != nil {
            //return errors.NewInternalServerError(err.Error())
            if ins := strings.Index(err.Error(), "no document"); ins > -1 {
                return utils.Response{201, "nodata", err.Error()}
            }
            return utils.Response{500, "error", err.Error()}
        }
    
        return nil
    }
    type ConnoInfo struct {
    
    ID        primitive.ObjectID `json:"id" bson:"_id"`
    Ts                date_utils.JsonTime `json:"ts" bson:"ts"`
    
    }
  • 相关阅读:
    矩阵微分
    Installing a single-server IBM FileNet P8 Platform system with IBM Content Navigator
    Linux创建LVM
    tomcat 集群配置,Session复制共享
    JBoss JMX登录需要用户名密码的解决办法
    JBOss启动只能在本机访问的解决办法
    SSH由WAS/Tomcat/Weblogic迁移到JBOSS
    Log4J实用配置指南
    Graphical installers are not supported by the vm
    在vim中执行外部命令
  • 原文地址:https://www.cnblogs.com/angdh/p/16194010.html
Copyright © 2020-2023  润新知