美文网首页
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