<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
安裝驅動
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:%vn", 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:%vn", 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:%vn", 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: %vn", 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: %vn", 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: %vn", dr.DeletedCount) return nil }
到此這篇關於golang連線MongoDB資料庫及資料庫操作指南的文章就介紹到這了,更多相關golang連線MongoDB資料庫內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45