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