首頁>技術>

2019年3月,釋出了適用於MongoDB的正式的可用於生產環境的GO驅動程式,該驅動程式自發布以來一直在持續更新。在本教程中,我們將學習使用Go驅動程式執行簡單的MongoDB CRUD操作。

環境準備

在開始本教程之前,需要做兩件事。

Go應該安裝在您的機器上。本教程使用Go 1.15版。您可以從此連結下載Go軟體包。在您的電腦上安裝最新版本的MongoDB並啟動MongoDB的本地伺服器。安裝MongoDB驅動程式

透過執行以下命令來安裝MongoDB go驅動程式:

go get go.mongodb.org``/mongo-driver

如果您正在使用Go Modules,則建立一個go.mod檔案,然後上述命令將在mod檔案中新增所需的依賴項。該檔案將所有專案要求鎖定為正確的版本。

設定主檔案

在您的專案資料夾中建立一個檔案main.go,然後在您的IDE中開啟它。在編寫用於MongoDB操作的程式碼之前,讓我們將所有必需的包匯入檔案中。

package main import (   "context"   "fmt"   "log"    "go.mongodb.org/mongo-driver/bson"   "go.mongodb.org/mongo-driver/mongo"   "go.mongodb.org/mongo-driver/mongo/options" )

現在,建立以下全域性變數,我們將在所有CRUD操作函式中使用這些全域性變數。

var client *mongo.Client var collection *mongo.Collection var ctx = context.TODO()

此外,建立文件型別的結構。

ype Person struct {     Name string     Age  int     City string }
連線到MongoDB

現在基本設定已準備就緒。讓我們建立第一個函式以連線到MongoDB。

func connect() *mongo.Client {   clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")   client, err := mongo.Connect(ctx, clientOptions)   if err != nil {        log.Fatal(err)   }   err = client.Ping(ctx, nil)   if err != nil {        log.Fatal(err)   }   fmt.Println("Connected to MongoDB!")   return client }

此函式將建立與我們本地執行的MongoDB的連線,並返回客戶端物件。一旦connect方法返回了客戶端物件,我們就可以使用Ping()方法檢查連線是否成功。如果Ping()方法返回任何錯誤,我們可以引發錯誤並返回。

插入操作

要只插入一個文件,可以使用insertOne方法,而要一起插入多個文件,可以使用insertMany方法。以下是在“個人”集合中插入一個文件的功能:

func insertOne() {   akash := Person{"Akash", 28, "Bengaluru"}   res, err := collection. InsertOne (ctx, akash)   if err != nil {        log.Fatal(err)   }   fmt.Println("Inserted document: ", res.InsertedID) }

這是將多個文件新增到集合的功能:

func insertMany() {   akash := Person{"Akash", 28, "Bengaluru"}   bob := Person {"Bob", 30, "New York"}   robin := Person {"Robin", 25, "London"}   persons := []interface{}{akash, bob, robin}  res, err := collection.InsertMany(ctx, persons)   if err != nil {        log.Fatal(err)   }   fmt.Println("Inserted documents: ", res.InsertedIDs) }

對於這兩個操作,我們都需要使用之前建立的Person結構,並使用我們的資料對其進行初始化。使用InsertMany函式,我們將需要為所有文件傳遞型別介面。

檢索操作

為了從集合中查詢資料,我們將需要透過過濾器,因此請確保已匯入bson包。我們將使用bson.D型別使用bson物件建立過濾器。

func retrieveOne() {   var result Person   filter := bson.D{{"name", "Akash"}}   err := collection.FindOne(ctx, filter).Decode(&result)   if err != nil {        log.Fatal(err)   }   fmt.Printf("Found a single document: %+v\n", result) }

同樣,我們可以使用Find方法檢索所有匹配的文件。

func retrieveAll() {   findOptions := options.Find()   findOptions.SetLimit(2)   var results []*Person   cur, err := collection.Find(ctx, bson.D{{}}, findOptions)   if err != nil {        log.Fatal(err)   }   // Loop through the cursor   for cur.Next(context.TODO()) {        var elem Person        err := cur.Decode(&elem)        if err != nil {             log.Fatal(err)        }        results = append(results, &elem)   }   if err := cur.Err(); err != nil {        log.Fatal(err)   }   cur.Close(context.TODO()) }

您可以使用選項包來指定諸如限價或訂單之類的選項。

更新操作

與FineOne方法相同,要進行更新,也可以將UpdateOne方法與bson過濾器物件一起使用。此程式碼將更新所有名稱為Akash的文件,並將Age的值增加一。

func update() {     filter := bson.D{{"name", "Akash"}}     update := bson.D{          {"$inc", bson.D{              {"Age", 1},          }},     }     updateResult, err := collection.UpdateOne(context.TODO(), filter, update)     if err != nil {          log.Fatal(err)     }     fmt.Printf("Updated documents: %+v\n", updateResult) }
刪除操作

要從任何集合中刪除文件,可以使用DeleteOne或DeleteMany方法。同樣,在這裡,我們可以傳遞bson過濾器物件以匹配文件並刪除它們。

func delete() {     deleteResult, err := collection.DeleteMany(ctx, bson.D{{}})     if err != nil {          log.Fatal(err)     }     fmt.Printf("Deleted %v documents in the trainers collection\n", deleteResult.DeletedCount) }

如果將bson.D {{}}物件作為過濾器引數傳遞,則它將刪除所有文件。您可以使用collection.Drop()方法刪除整個集合。

所有這些功能準備就緒後,您可以根據需要在驅動程式功能中使用它們。希望這足以使您開始使用Go編寫MongoDB函式。有關更多資訊,您可以參考Go Mongo驅動程式的官方文件。

19
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 跟光磊學Java開發-字串的應用和記憶體分析