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

Sử dụng MongoDB làm Nguồn dữ liệu trong GoLang

Trước khi bạn bắt đầu

Hướng dẫn này giả sử bạn có:

  • Hiểu biết cơ bản về Ngôn ngữ cờ vây
  • Phiên bản GoLang mới nhất được cài đặt trên hệ thống của bạn
  • Phiên bản MongoDB mới nhất được cài đặt trên hệ thống của bạn

Trong hướng dẫn này, chúng tôi sẽ sử dụng Trình điều khiển MongoDB Go chính thức để quản lý cơ sở dữ liệu MongoDB của chúng tôi. Trong quá trình thích hợp, chúng tôi sẽ viết một chương trình để tìm hiểu cách cài đặt MongoDB Go Driver và thực hiện các hoạt động CRUD với nó.

Cài đặt

Đầu tiên trong một thư mục trống, hãy chạy lệnh dưới đây

go mod init gomongo

go mod init tạo một tệp go.mod mới và tự động nhập các phần phụ thuộc khi bạn chạy chương trình go. Sau đó, tạo tệp main.go và viết mã bên dưới, Chúng tôi sẽ giải thích mã này sẽ làm gì sau ít phút.

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

// Book - We will be using this Book type to perform crud operations
type Book struct {
  Title     string
  Author    string
  ISBN      string
  Publisher string
  Copies     int
}

func main() {
    
  // Set client options
  clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")

  // Connect to MongoDB
  client, err := mongo.Connect(context.TODO(), clientOptions)

  if err != nil {
    log.Fatal(err)
  }

  // Check the connection
  err = client.Ping(context.TODO(), nil)

  if err != nil {
    log.Fatal(err)
  }

  fmt.Println("Connected to MongoDB!")
  booksCollection := client.Database("testdb").Collection("books")
}

Trong đoạn mã trên, chúng tôi đã nhập các gói bson, mongo và mongo / options của mongo-driver và xác định một Book loại sẽ được sử dụng trong hướng dẫn này

Trong chức năng chính trước tiên, chúng tôi đã tạo clientOptions với URL MongoDB và thông tin đăng nhập và chuyển nó vào mongo.Connect chức năng, Sau khi kết nối, chúng tôi có thể kiểm tra kết nối của mình bằng client.Ping chức năng.

Đoạn mã sau sẽ sử dụng booksCollection biến để truy vấn books bộ sưu tập từ testdb.

booksCollection := client.Database("testdb").Collection("books")

Chèn tài liệu

Đầu tiên, hãy tạo một cấu trúc Sách để chèn vào bộ sưu tập, trong đoạn mã dưới đây, chúng tôi đang sử dụng collection.InsertOne chức năng chèn một tài liệu duy nhất trong bộ sưu tập

// Insert One document
book1 := Book{"Animal Farm", "George Orwell", "0451526341", "Signet Classics", 100}
insertResult, err := booksCollection.InsertOne(context.TODO(), book1)
if err != nil {
    log.Fatal(err)
}

fmt.Println("Inserted a single document: ", insertResult.InsertedID)

Để chèn nhiều tài liệu cùng một lúc, chúng ta cần tạo một phần của Book và chuyển nó vào collection.InsertMany

// Insert multiple documents
book2 := Book{"Super Freakonomics", "Steven D. Levitt", "0062312871", "HARPER COLLINS USA", 100}
book3 := Book{"The Alchemist", "Paulo Coelho", "0062315005", "HarperOne", 100}
multipleBooks := []interface{}{book2, book3}

insertManyResult, err := booksCollection.InsertMany(context.TODO(), multipleBooks)
if err != nil {
    log.Fatal(err)
}

fmt.Println("Inserted multiple documents: ", insertManyResult.InsertedIDs)

Cập nhật tài liệu

Chúng tôi có thể cập nhật một tài liệu đơn lẻ bằng hàm collection.UpdateOne . Nó yêu cầu một tài liệu lọc để khớp với các tài liệu trong bộ sưu tập và một tài liệu cập nhật để mô tả hoạt động cập nhật. Bạn có thể xây dựng chúng bằng cách sử dụng các loại bson.D. Mã dưới đây sẽ khớp sách với ISBN 0451526341 và tăng trường bản sao lên 10

//Update one document
filter := bson.D{{"isbn", "0451526341"}}

update := bson.D{
    {"$inc", bson.D{
        {"copies", 10},
    }},
}

updateResult, err := booksCollection.UpdateOne(context.TODO(), filter, update)
if err != nil {
    log.Fatal(err)
}

fmt.Printf("Matched %v documents and updated %v documents.\n", updateResult.MatchedCount, updateResult.ModifiedCount)

Bạn cũng có thể cập nhật nhiều tài liệu cùng một lúc trong một bộ sưu tập bằng hàm collection.UpdateMany Trong đó, chúng ta cần chuyển tài liệu lọc và cập nhật tài liệu giống như collection.UpdateOne

Tìm tài liệu

Để tìm một tài liệu, chúng ta có thể sử dụng hàm collection.FindOne() , chúng tôi sẽ chuyển một tài liệu lọc và giải mã kết quả trong Book loại biến

// A variable in which result will be decoded
var result Book

err = booksCollection.FindOne(context.TODO(), filter).Decode(&result)
if err != nil {
    log.Fatal(err)
}

fmt.Printf("Found a single document: %+v\n", result)

Để tìm nhiều tài liệu, chúng tôi sử dụng hàm collection.Find() . Phương thức này trả về một Con trỏ, Nó cung cấp một luồng tài liệu mà chúng ta có thể lặp lại hoặc chúng ta có thể lấy tất cả các tài liệu bằng hàm cursor.All() trong một phần của Book gõ phím.

cursor, err := booksCollection.Find(context.TODO(), bson.D{{}})
if err != nil {
  log.Fatal(err)
}
var books []Book
if err = cursor.All(context.TODO(), &books); err != nil {
  log.Fatal(err)
}
fmt.Printf("Found multiple documents: %+v\n", books)

Xóa tài liệu

Chúng tôi có thể xóa tài liệu khỏi bộ sưu tập bằng các hàm collection.DeleteOne() hoặc collection.DeleteMany() . Tại đây, bạn chuyển bson.D {{}} làm đối số bộ lọc, đối số này sẽ khớp với tất cả các tài liệu trong bộ sưu tập.

deleteCollection, err := booksCollection.DeleteMany(context.TODO(), bson.D{{}})
if err != nil {
    log.Fatal(err)
}
fmt.Printf("Deleted %v documents in the books collection\n", deleteCollection.DeletedCount)

Toàn bộ bộ sưu tập có thể bị xóa bằng cách sử dụng hàm collection.Drop (), nó sẽ xóa tất cả tài liệu và siêu dữ liệu, chẳng hạn như chỉ mục khỏi bộ sưu tập

Khi bạn đã thực hiện tất cả các thao tác, đừng quên đóng kết nối MongoDB

err = client.Disconnect(context.TODO())

if err != nil {
    log.Fatal(err)
}

fmt.Println("Connection to MongoDB closed.")

Giờ đây, bạn có thể dễ dàng sử dụng MongoDB làm Nguồn dữ liệu trong ứng dụng di động của mình, Bạn có thể tìm thấy mã hoàn chỉnh được sử dụng trong hướng dẫn này trên Github Repo của chúng tôi


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nâng cấp hàng loạt trong MongoDB bằng cách sử dụng mongoose

  2. MongoDB riêng biệt ()

  3. Thiết kế lược đồ MongoDB:Luôn có một lược đồ

  4. MongoDB:khung tổng hợp:$ khớp giữa các trường

  5. Loại bỏ các loại đa hình với MongoDB C # Driver