MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Bắt đầu với MongoDB Go Driver

Vào tháng 3 năm 2019, trình điều khiển GO chính thức, sẵn sàng sản xuất cho MongoDB đã được phát hành và nó đang nhận được các bản cập nhật liên tục từ khi ra mắt. Trong hướng dẫn này, chúng ta sẽ học cách thực hiện các thao tác MongoDB CRUD đơn giản bằng trình điều khiển Go.

Điều kiện tiên quyết

Cần có hai điều trước khi chúng ta bắt đầu với hướng dẫn này.

  • Go sẽ được cài đặt trên máy của bạn. Phiên bản Go 1.15 được sử dụng cho hướng dẫn này. Bạn có thể tải xuống gói Go từ liên kết này.
  • Cài đặt phiên bản MongoDB mới nhất trên máy của bạn và khởi động máy chủ cục bộ của MongoDB.

Cài đặt Trình điều khiển MongoDB

Cài đặt trình điều khiển MongoDB go bằng cách chạy lệnh sau:

go get go.mongodb.org/mongo-driver

Nếu bạn đang sử dụng Go Modules thì hãy tạo tệp go.mod và sau đó lệnh trên sẽ thêm phần phụ thuộc cần thiết vào tệp mod. Tệp này khóa tất cả các yêu cầu của dự án về phiên bản chính xác của nó.

Thiết lập Tệp Chính

Tạo tệp main.go trong thư mục dự án của bạn và mở tệp đó trong IDE của bạn. Trước khi chúng tôi viết mã cho các hoạt động MongoDB, hãy nhập tất cả các gói cần thiết vào tệp.

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"

)

Bây giờ, hãy tạo các biến toàn cục sau đây mà chúng tôi sẽ sử dụng trên tất cả các hàm hoạt động CRUD.

var client *mongo.Client

var collection *mongo.Collection

var ctx = context.TODO()

Ngoài ra, hãy tạo cấu trúc cho loại tài liệu.

type Person struct {

Name string

Age  int

City string

}

Đang kết nối với MongoDB

Bây giờ thiết lập cơ sở đã sẵn sàng. Hãy tạo chức năng đầu tiên của chúng tôi để kết nối với 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

}

Hàm này sẽ thiết lập kết nối với MongoDB đang chạy cục bộ của chúng ta và trả về đối tượng khách. Khi phương thức kết nối trả về đối tượng khách, chúng ta có thể sử dụng phương thức Ping () để kiểm tra xem kết nối có thành công hay không. Nếu phương thức Ping () trả về bất kỳ lỗi nào, chúng tôi có thể sửa lỗi và trả về.

Thao tác Chèn

Để chỉ chèn một tài liệu, chúng ta có thể sử dụng phương thức insertOne và để chèn nhiều tài liệu cùng nhau, chúng ta có thể sử dụng phương thức insertMany. Sau đây là chức năng để chèn một tài liệu trong tập hợp Person:

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)

}

Đây là chức năng thêm nhiều tài liệu vào bộ sưu tập:

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)

}

Đối với cả hai thao tác, chúng ta cần sử dụng cấu trúc Person mà chúng ta đã tạo trước đó và khởi tạo nó bằng dữ liệu của chúng ta. Với chức năng InsertMany, chúng tôi sẽ yêu cầu chuyển giao diện loại cho tất cả các tài liệu.

Thao tác Truy xuất

Để tìm dữ liệu từ bộ sưu tập, chúng tôi sẽ yêu cầu bộ lọc thông qua để đảm bảo rằng bạn đã nhập gói bson. Chúng tôi sẽ sử dụng kiểu bson.D để tạo bộ lọc bằng cách sử dụng các đối tượng 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)

}

Theo cách tương tự, chúng ta có thể sử dụng phương pháp Tìm để truy xuất tất cả các tài liệu phù hợp.

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())

}

Bạn có thể sử dụng gói tùy chọn để chỉ định các tùy chọn như giới hạn hoặc đơn đặt hàng.

Thao tác Cập nhật

Tương tự như phương thức FineOne, để cập nhật, bạn cũng có thể sử dụng phương thức UpdateOne với đối tượng bộ lọc bson. Mã này sẽ cập nhật tất cả các tài liệu có tên Akash và tăng giá trị của Age lên một.

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)

}

Thao tác Xóa

Để xóa tài liệu khỏi bất kỳ bộ sưu tập nào, bạn có thể sử dụng phương pháp DeleteOne hoặc DeleteMany. Tại đây, chúng ta có thể chuyển các đối tượng bộ lọc bson để khớp với tài liệu và xóa chúng.

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)

}

Nếu bạn chuyển đối tượng bson.D {{}} làm tham số bộ lọc thì nó sẽ xóa tất cả tài liệu. Bạn có thể sử dụng phương thức collection.Drop () để loại bỏ toàn bộ bộ sưu tập.

Khi tất cả các chức năng này đã sẵn sàng, bạn có thể sử dụng chúng trong chức năng trình điều khiển tùy theo nhu cầu của mình. Hy vọng rằng điều này sẽ đủ để giúp bạn bắt đầu viết các hàm MongoDB trong Go. Để biết thêm thông tin, bạn có thể tham khảo tài liệu chính thức về trình điều khiển Go Mongo.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách sử dụng các biến trong hàm bản đồ MongoDB Map-Reduce

  2. Làm cách nào để tạo chỉ mục với pymongo

  3. Bảo mật MongoDB khỏi các cuộc tấn công từ bên ngoài

  4. MongoDB sắp xếp các bản ghi như thế nào khi không có thứ tự sắp xếp nào được chỉ định?

  5. Mongoose.js tạo nhiều kết nối đến MongoDB từ một lệnh gọi connect ()