package models import ( "LAPP_GAAS_GFrame_BACKEND/conf" "LAPP_GAAS_GFrame_BACKEND/db" "LAPP_GAAS_GFrame_BACKEND/utils" "fmt" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo/options" "log" "context" ) //数据库 type Database struct { ID int `bson:"id" json:"database-id"` //ID:uuid唯一字符串 DbName string `bson:"dbname" json:"database-dbname"` //数据库名称 DriverName string `bson:"drivername" json:"database-drivername"` //引擎类型 Host string `bson:"host" json:"database-host"` //链接地址 Port int `bson:"port" json:"database-port"` //端口号 User string `bson:"user" json:"database-user"` //用户名 Pwd string `bson:"pwd" json:"database-pwd"` //密码 Sourcetype string `bson:"sourcetype" json:"database-sourcetype"` //主库和从库 } func (t *Database) TableName() string { return "database" } func (t *Database) InsertRecord() (insertID primitive.ObjectID) { //1.初始化链接 client := db.MgoDb() //2.选择数据库,数据表 collect := client.Database(conf.DbConfig.Mongdbname).Collection("database") insertRest, err := collect.InsertOne(context.TODO(), t) if err != nil { fmt.Println(err) return } insertID = insertRest.InsertedID.(primitive.ObjectID) return insertID } func (t *Database) UpdateData() error { //1.初始化链接 client := db.MgoDb() //2.选择数据库,数据表 collect := client.Database(conf.DbConfig.Mongdbname).Collection("database") // 修改一条数据,如果不存在则插入 new := &Database{ ID: t.ID, DbName: t.DbName, DriverName: t.DriverName, Host: t.Host, Port: t.Port, User: t.User, Pwd: t.Pwd, Sourcetype: t.Sourcetype, } update := bson.M{"$set": new} _, err := collect.UpdateOne(context.Background(), bson.M{"dbname": new.DbName,"drivername":new.DriverName}, update) if err != nil { return err } return nil } func (t *Database) FindList(logred SerchData, skip int64, limit int64) ([]*Database, int64) { res := bson.M{} // 创建需要过滤的条件 if logred.Key == "dbname" { res = bson.M{"dbname": primitive.Regex{Pattern: logred.Val}} } if logred.Key == "drivername" { res = bson.M{"drivername": primitive.Regex{Pattern: logred.Val}} } if logred.Key == "host" { res = bson.M{"host": primitive.Regex{Pattern: logred.Val}} } res = bson.M{"sourcetype": primitive.Regex{Pattern: "Slave"}} //1.初始化链接 client := db.MgoDb() //2.选择数据库,数据表 collect := client.Database(conf.DbConfig.Mongdbname).Collection("database") //var skip int64 = 0//从那个开始 //var limit int64 = 2//炼制几个输出字段 cursor, err := collect.Find(context.TODO(), res, &options.FindOptions{ Skip: &skip, Limit: &limit, Sort: bson.D{{"id", -1}}, }) if err != nil { fmt.Println(err) return nil, 0 } defer cursor.Close(context.TODO()) //创建需要反序列化成什么样子的结构体对象 records := make([]*Database, 0) for cursor.Next(context.TODO()) { record := &Database{} //反序列化 err = cursor.Decode(record) if err != nil { fmt.Println(err) return nil, 0 } //追加 records = append(records, record) } // 获取数据总数 count, err := collect.CountDocuments(context.Background(), bson.D{}) if err != nil { log.Fatal(count) } return records, count } func (t *Database) FindData() []*Database { res := bson.M{} // 创建需要过滤的条件 if !utils.ValueIsEmpty(t.Sourcetype) { res = bson.M{"sourcetype": primitive.Regex{Pattern: t.Sourcetype}} } limit := int64(500) skip := int64(0) //1.初始化链接 client := db.MgoDb() //2.选择数据库,数据表 collect := client.Database(conf.DbConfig.Mongdbname).Collection("database") //var skip int64 = 0//从那个开始 //var limit int64 = 2//炼制几个输出字段 cursor, err := collect.Find(context.TODO(), res, &options.FindOptions{ Skip: &skip, Limit: &limit, Sort: bson.D{{"id", -1}}, }) fmt.Println(cursor) if err != nil { return nil } defer cursor.Close(context.TODO()) //创建需要反序列化成什么样子的结构体对象 records := make([]*Database, 0) for cursor.Next(context.TODO()) { record := &Database{} //反序列化 err = cursor.Decode(record) if err != nil { fmt.Println(err) return nil } //追加 records = append(records, record) } return records } func (t *Database) FindOne() (Database,error) { //1.初始化链接 client := db.MgoDb() //2.选择数据库,数据表 collect := client.Database(conf.DbConfig.Mongdbname).Collection("database") record := Database{} err := collect.FindOne(context.Background(), bson.M{"dbname": t.DbName,"drivername":t.DriverName}).Decode(&record) if err != nil { return record,err } return record,nil } func (t *Database) DelData() error { //1.初始化链接 client := db.MgoDb() //2.选择数据库,数据表 collect := client.Database(conf.DbConfig.Mongdbname).Collection("database") // 修改一条数据,如果不存在则插入 new := &Database{ DbName: t.DbName, DriverName: t.DriverName, } // 删除一条数据 _, err := collect.DeleteOne(context.Background(), bson.M{"dbname": new.DbName,"drivername":new.DriverName}) if err != nil { return err } return nil }