美文网首页
go语言 MongoDB CRDU操作

go语言 MongoDB CRDU操作

作者: 丶赤水断 | 来源:发表于2019-05-07 13:55 被阅读0次

    数据库驱动

    go语言中mongodb 有一个社区驱动 mgo
    mgo文档

    但是最近mongo官方推出了Go驱动,所以我们用官方的。
    相关链接 :
    MongoDB 文档
    MongoDB Go Driver

    链接数据库

    package db
    
    var (
        dataBase *mongo.Database   //DB实例
        ctx context.Context  //DB context
        client   mongo.Client 
    )
    
    func init(){
        client, err := mongo.NewClient(options.Client().ApplyURI("mongodb://localhost:27017"))
        ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
        err = client.Connect(Ctx)
        if err != nil {
            log.Fatal(err.Error())
        }
        dataBase = client.Database(DATABASE_NAME)  //DATABASE_NAME即数据库名称
    }
    //在这下面定义两个函数来获取DB 和 context
    func GetDB() *mongo.Database {
        return dataBase
    }
    func GetCtx() *context.Context{
          return ctx
    }
    

    数据库结构

    假设有数据库结构如下:
    Collection "user"
    username string
    password string
    age int
    created date
    对应go的model如下:

    package userModel
    type User struct{
         Username string `bson:"username"`
         Password string `bson:"passowrd"`
         Age  int `bson:"age"`
         Created time.Time `bson:"created"`
    }
    

    插入操作

    func AddOneUser () error{
          //获取collection
          con := db.GetDB().Collection("user")
          // 插入的数据     
          insertData := userModel.User{  
                  Username:"123",
                  Password:"321",
                  Age : 18,
                  Created:Time.Now(),
          }
          //下面的方法也可以  
          /*
          insertData := bson.M{
              Username:"123",
              Password:"321",
              Age : 18,
              Created:Time.Now(),
          }
          */
          //插入   
          result, err := con.InsertOne(db.GetCtx(), &insertData)
          log.PrintLn(result) //result 是插入后的结果,/插入/匹配/修改/删除/Upsert/  的document数量
          return err
    } 
    

    批量插入操作

    func AddOneUser (users *[]User) error{
          //获取collection
          con := db.GetDB().Collection("user")
          // users 即插入的数据
          //插入   
          result, err := con.InsertMany(db.GetCtx(), users)
          log.PrintLn(result) //result 是插入后的结果,/插入/匹配/修改/删除/Upsert/  的document数量
          return err
    } 
    

    删除操作

    func DeleteUser (name string) error{
          //通过name来删除user
          //获取collection
          con := db.GetDB().Collection("user")
          result, err := con.DeleteOne(db.GetCtx(),bson.M{"name":name})
          log.PrintLn(result) 
          return err
    }
    

    修改操作

    func UpdateUser(name string,newUserInfo User) error{
          //通过name来更新  ,newUserInfo 是需要更新的user信息
          //获取collection
          con := db.GetDB().Collection("user")
          //匹配名称为name的文档记录  并更新为 newUserInfo 
          result, err := con.UpdateOne(db.GetCtx(), bson.M{"name":name},bson.M{"$set":newUserInfo})
          log.PrintLn(result) 
          return err
    }
    

    查询操作

    func FindUserByName(name string) error{
          //通过name寻找user信息
          //获取collection
          con := db.GetDB().Collection("user")
          //将获取到的user储存在user变量中  
          user := User{}
          //查询到结果后解码到user变量中
           err := con.FindOne(db.GetCtx(), bson.M{"name":name}).Decode(&user)
         
          return err
    }
    

    相关文章

      网友评论

          本文标题:go语言 MongoDB CRDU操作

          本文链接:https://www.haomeiwen.com/subject/veheoqtx.html