Go操作mongodb數(shù)據(jù)庫方法示例
添加mongodb驅(qū)動程序
用于go get將 Go 驅(qū)動程序添加為依賴項。
go get go.mongodb.org/mongo-driver/mongo
使用方法
創(chuàng)建main.go 文件
package main import ( "context" "fmt" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/mongo/readpref" "log" "time" ) // MongoDB 連接池 var MongoDBClient *mongo.Database // pool 連接池模式 func ConnectToDBPool() { user := "admin" password := "12345678" host := "127.0.0.1" port := "27017" dbName := "demo" timeOut := 2 maxNum := 50 uri := fmt.Sprintf("mongodb://%s:%s@%s:%s/%s?w=majority", user, password, host, port, dbName) // 設(shè)置連接超時時間 ctx, cancel := context.WithTimeout(context.Background(), time.Duration(timeOut)) defer cancel() // 通過傳進(jìn)來的uri連接相關(guān)的配置 o := options.Client().ApplyURI(uri) // 設(shè)置最大連接數(shù) - 默認(rèn)是100 ,不設(shè)置就是最大 max 64 o.SetMaxPoolSize(uint64(maxNum)) // 發(fā)起鏈接 client, err := mongo.Connect(ctx, o) if err != nil { fmt.Println("ConnectToDB", err) return } // 判斷服務(wù)是不是可用 if err = client.Ping(context.Background(), readpref.Primary()); err != nil { fmt.Println("ConnectToDB", err) return } // 返回 client MongoDBClient = client.Database(dbName) } func ConnectToDB() { clientOptions := options.Client().ApplyURI("mongodb://admin:12345678@localhost:27017") var ctx = context.TODO() // Connect to MongoDB client, err := mongo.Connect(ctx, clientOptions) if err != nil { log.Fatal(err) } // Check the connection err = client.Ping(ctx, nil) if err != nil { log.Fatal(err) } fmt.Println("Connected to MongoDB!") // 返回 client MongoDBClient = client.Database("demo") //defer client.Disconnect(ctx) } // 插入單條數(shù)據(jù) func insertOne() { ash := Member{"13212345678", "123456", []string{"abc1", "efg1", "hij1"}} insertResult, err := MongoDBClient.Collection("test1").InsertOne(context.TODO(), ash) if err != nil { fmt.Println(err) } println("Inserted a single document: ", insertResult.InsertedID) } // 插入多條數(shù)據(jù) func insert() { var ash []interface{} ash = append(ash, Member{"13222222222", "123456", []string{"aaa", "bbb", "ccc"}}) ash = append(ash, Member{"13333333333", "123456", []string{"aaa1", "bbb1", "ccc1"}}) fmt.Println(ash) insertResult, err := MongoDBClient.Collection("test1").InsertMany(context.TODO(), ash) if err != nil { fmt.Println(err) } println("Inserted Multiple document: ", insertResult.InsertedIDs) } // 查詢單條 func findOne() { var result bson.M err := MongoDBClient.Collection("test1").FindOne(context.TODO(), bson.D{{"info", "aaa1"}}).Decode(&result) if err != nil { if err == mongo.ErrNoDocuments { //This error means your query did not match any documents. return } panic(err) } fmt.Println(result) } // 查詢多條數(shù)據(jù) func find() { findOptions := options.Find() findOptions.SetLimit(10) cur, err := MongoDBClient.Collection("test1").Find(context.TODO(), bson.D{{"phone", "13333333333"}}, findOptions) if err != nil { fmt.Println(err) } var results []*Member for cur.Next(context.TODO()) { // create a value into which the single document can be decoded var elem Member err := cur.Decode(&elem) if err != nil { fmt.Println(err) } results = append(results, &elem) } if err := cur.Err(); err != nil { fmt.Println(err) } //fmt.Println(results) for _, v := range results { fmt.Println(v.Phone) fmt.Println(v.Name) fmt.Println(v.Info) } } func updateOne() { //如果過濾的文檔不存在,則插入新的文檔 opts := options.Update().SetUpsert(true) id, _ := primitive.ObjectIDFromHex("633b02b6e082e5046001d0b9") filter := bson.D{{"_id", id}} update := bson.D{{"$set", bson.D{{"phone", "1444444444444"}}}} result, err := MongoDBClient.Collection("test1").UpdateOne(context.TODO(), filter, update, opts) //result, err := MongoDBClient.Collection("test1").UpdateOne(context.TODO(), filter, update) if err != nil { panic(err) } fmt.Println(result) } func update() { filter := bson.D{{"name", "123456"}} update := bson.D{{"$set", bson.D{{"name", "張三"}}}} result, err := MongoDBClient.Collection("test1").UpdateMany(context.TODO(), filter, update) if err != nil { panic(err) } fmt.Println(result) } // 替換文檔 func replaceOne() { filter := bson.D{{"phone", "13222222222"}} replacement := bson.D{{"phone", "16666666666"}} result, err := MongoDBClient.Collection("test1").ReplaceOne(context.TODO(), filter, replacement) if err != nil { panic(err) } fmt.Println(result) } // 刪除單個文件 func deleteOne() { filter := bson.D{{"phone", "16666666666"}} result, err := MongoDBClient.Collection("test1").DeleteOne(context.TODO(), filter) if err != nil { panic(err) } fmt.Println(result) } // 刪除多個 func delete() { //filter := bson.D{{"runtime", bson.D{{"$gt", 800}}}} filter := bson.D{{"phone", "16666666666"}} results, err := MongoDBClient.Collection("test1").DeleteMany(context.TODO(), filter) if err != nil { panic(err) } fmt.Println(results) } type Member struct { Phone string Name string Info []string } func main() { //連接數(shù)據(jù)庫 ConnectToDB() //連接池連接數(shù)據(jù)庫 //ConnectToDBPool() //插入單條數(shù)據(jù) //insertOne() //插入多條數(shù)據(jù) //insert() //查找單條數(shù)據(jù) //findOne() //查找多條數(shù)據(jù) find() //修改單條數(shù)據(jù) //updateOne() //修改多條數(shù)據(jù) //update() //替換文檔 //replaceOne() // 刪除多個 //deleteOne() // 刪除多個 //delete() }
links https://www.mongodb.com/docs/...
以上就是Go操作mongodb數(shù)據(jù)庫方法示例的詳細(xì)內(nèi)容,更多關(guān)于Go操作mongodb的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go項目在GoLand中導(dǎo)入依賴標(biāo)紅問題的解決方案
這篇文章主要介紹了Go項目在GoLand中導(dǎo)入依賴標(biāo)紅問題的解決方案,文中通過代碼示例講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-06-06Go處理json數(shù)據(jù)方法詳解(Marshal,UnMarshal)
這篇文章主要介紹了Go處理json數(shù)據(jù)的方法詳解,Marshal(),UnMarshal(),需要的朋友可以參考下2022-04-04golang goquery selector選擇器使用示例大全
這篇文章主要為大家介紹了golang goquery selector選擇器使用示例大全,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09golang獲取變量或?qū)ο箢愋偷膸追N方式總結(jié)
在golang中并沒有提供內(nèi)置函數(shù)來獲取變量的類型,但是通過一定的方式也可以獲取,下面這篇文章主要給大家介紹了關(guān)于golang獲取變量或?qū)ο箢愋偷膸追N方式,需要的朋友可以參考下2022-12-12golang中實(shí)現(xiàn)給gif、png、jpeg圖片添加文字水印
這篇文章主要介紹了golang中實(shí)現(xiàn)給gif、png、jpeg圖片添加文字水印,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04關(guān)于Golang中range指針數(shù)據(jù)的坑詳解
這篇文章主要給大家介紹了關(guān)于Golang中range指針數(shù)據(jù)的坑的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02詳解Go語言如何對數(shù)據(jù)庫進(jìn)行CRUD操作
在這篇文章中,主要帶大家來學(xué)習(xí)一下在Go語言中如何對數(shù)據(jù)庫進(jìn)行CRUD操作,從而探討一下Go的接口編程,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-05-05