網站首頁 編程語言 正文
安裝配置MongoDB驅動
安裝驅動
go get -u github.com/mongodb/mongo-go-driver
初始化模塊
go mod init 模塊名稱
執行go mod tidy
go mod tidy
導入驅動
import ( "context" "go.mongodb.org/mongo-driver/bson" //BOSN解析包 "go.mongodb.org/mongo-driver/mongo" //MongoDB的Go驅動包 "go.mongodb.org/mongo-driver/mongo/options" )
獲得數據庫連接
初始化連接
package main import ( "context" "fmt" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) var client *mongo.Client func initDB() (err error) { // 設置客戶端連接配置 clientOptions := options.Client().ApplyURI("mongodb://ip:port") // 連接到MongoDB client, err = mongo.Connect(context.TODO(), clientOptions) if err != nil { return err } // 檢查連接 err = client.Ping(context.TODO(), nil) if err != nil { return err } return nil } func main() { err := initDB() // 調用輸出化數據庫的函數 if err != nil { fmt.Printf("初始化失敗!,err:%v\n", err) return }else{ fmt.Println("Connected to MongoDB!") } }
連接MongoDB的Go驅動程序中有兩大類型表示BSON數據:D和Raw。
類型D家族被用來簡潔地構建使用本地Go類型的BSON對象。這對于構造傳遞給MongoDB的命令特別有用。D家族包括四類:
D:一個BSON文檔。這種類型應該在順序重要的情況下使用,比如MongoDB命令。
bson.D{{"foo", "bar"}, {"hello", "world"}, {"pi", 3.14159}}
M:一張無序的map。它和D是一樣的,只是它不保持順序。
bson.M{"foo": "bar", "hello": "world", "pi": 3.14159}
A:一個BSON數組。
bson.A{"hello", "world", 3.14159, bson.D{{"abcde", 12345}}}
E:D里面的一個元素。
要使用BSON,需要先導入下面的包:
import "go.mongodb.org/mongo-driver/bson"
Raw類型家族用于驗證字節切片。你還可以使用Lookup()從原始類型檢索單個元素。如果你不想要將BSON反序列化成另一種類型的開銷,那么這是非常有用的。
數據庫操作
添加文檔
添加單個文檔
使用collection.InsertOne()方法插入一條文檔記錄:
func insertOne(s interface{}) (err error) { collection := client.Database("datebase").Collection("collection") insertResult, err := collection.InsertOne(context.TODO(), s) if err != nil { return err } fmt.Println("Inserted a single document: ", insertResult.InsertedID) return nil }
測試:
s := struct{name string age int }{"tom", 20} err := insertOne(s) if err != nil{ fmt.Printf("添加文檔失敗!,err:%v\n", err) }
添加多個文檔
使用collection.InsertMany()方法插入多條文檔記錄:
func insertMore(s []interface{}) (err error) { //students := []interface{}{s2, s3} collection := client.Database("datebase").Collection("collection") insertManyResult, err := collection.InsertMany(context.TODO(), s) if err != nil { return err } fmt.Println("Inserted multiple documents: ", insertManyResult.InsertedIDs) return nil }
測試:
type Student struct { name string age int } s1 := Student{name: "tom", age: 20} s2 := Student{name: "kite", age: 21} s3 := Student{name: "rose", age: 22} ss := []interface{}{s1, s2, s3} insertMore(ss) if err != nil{ fmt.Printf("添加多個文檔失敗!,err:%v\n", err) }
查找文檔
func find() (err error){ ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() collection := client.Database("datebase").Collection("collection") cur, err := collection.Find(ctx, bson.D{}) if err != nil { return err } defer cur.Close(ctx) for cur.Next(ctx) { var result bson.D err := cur.Decode(&result) if err != nil { return err } fmt.Printf("result: %v\n", result) } if err := cur.Err(); err != nil { return err } return nil }
更新文檔
func update() (err error) { ctx := context.TODO() defer client.Disconnect(ctx) c := client.Database("datebase").Collection("collection") update := bson.D{{"$set", bson.D{{"attr1", "value1"}, {"attr2", "value2"}}}} ur, err := c.UpdateMany(ctx, bson.D{{"old_attr1", "old_value1"}}, update) if err != nil { return err } fmt.Printf("ur.ModifiedCount: %v\n", ur.ModifiedCount) return nil }
刪除文檔
func del() (err error) { c := client.Database("datebase").Collection("collection") ctx := context.TODO() dr, err := c.DeleteMany(ctx, bson.D{{"attr1", "value1"}}) if err != nil { return err } fmt.Printf("ur.ModifiedCount: %v\n", dr.DeletedCount) return nil }
總結
原文鏈接:https://blog.csdn.net/ymxyld/article/details/124931029
相關推薦
- 2022-09-24 React報錯之Object?is?possibly?null的問題及解決方法_React
- 2022-11-28 ContentProvider客戶端處理provider邏輯分析_Android
- 2022-05-10 詳解CLR的內存分配和回收機制_C#教程
- 2022-03-27 Android使用kotlin實現多行文本上下滾動播放_Android
- 2022-05-02 Python?私有屬性與私有方法_python
- 2022-05-22 部署ASP.NET?Core程序到Windows系統_基礎應用
- 2022-07-06 Python函數之iterrows(),iteritems(),itertuples()的區別說明_
- 2022-07-29 Pytorch實現常用乘法算子TensorRT的示例代碼_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支