MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Menggunakan MongoDB sebagai Sumber Data di GoLang

Sebelum Anda Memulai

Tutorial ini mengasumsikan Anda memiliki:

  • Pemahaman dasar tentang Bahasa Go
  • Versi GoLang terbaru terinstal di sistem Anda
  • Versi MongoDB terbaru terinstal di sistem Anda

Dalam tutorial ini, kita akan menggunakan Driver MongoDB Go resmi untuk mengelola database MongoDB kami. Dalam prosesnya, kami akan menulis sebuah program untuk mempelajari cara menginstal Driver MongoDB Go dan melakukan operasi CRUD dengannya.

Instalasi

Pertama di folder kosong jalankan perintah di bawah ini

go mod init gomongo

go mod init membuat file go.mod baru dan secara otomatis mengimpor dependensi saat Anda menjalankan program go. Kemudian buat file main.go dan tulis kode di bawah ini, Kami akan menjelaskan apa yang akan dilakukan kode ini dalam satu menit.

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

Pada kode di atas, kita telah mengimpor paket bson, mongo, dan mongo/options dari mongo-driver dan mendefinisikan Book jenis yang akan digunakan dalam tutorial ini

Di fungsi utama terlebih dahulu, kami membuat clientOptions dengan URL dan kredensial MongoDB dan meneruskannya ke mongo.Connect fungsi, Setelah terhubung, kita dapat memeriksa koneksi kita dengan client.Ping fungsi.

Kode berikut akan menggunakan booksCollection variabel untuk menanyakan books koleksi dari testdb.

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

Sisipkan Dokumen

Pertama mari kita buat struct Buku untuk dimasukkan ke dalam koleksi, pada kode di bawah ini kita menggunakan collection.InsertOne berfungsi untuk menyisipkan satu dokumen ke dalam koleksi

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

Untuk menyisipkan beberapa dokumen sekaligus, kita perlu membuat sepotong Book objek dan berikan ke 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)

Perbarui Dokumen

Kami dapat memperbarui satu dokumen dengan fungsi collection.UpdateOne . Ini membutuhkan dokumen filter untuk mencocokkan dokumen dalam koleksi dan dokumen yang diperbarui untuk menjelaskan operasi pembaruan. Anda dapat membangun ini menggunakan tipe bson.D. Kode di bawah ini akan cocok dengan buku dengan ISBN 0451526341 dan tambah bidang salinan sebesar 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)

Anda juga dapat memperbarui lebih dari satu dokumen sekaligus dalam satu koleksi dengan fungsi collection.UpdateMany , Di dalamnya, kita perlu melewati dokumen filter dan memperbarui dokumen yang sama dengan collection.UpdateOne

Temukan Dokumen

Untuk menemukan satu dokumen, kita dapat menggunakan fungsi collection.FindOne() , kami akan melewati dokumen filter dan mendekode hasilnya di Book jenis variabel

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

Untuk menemukan banyak dokumen, kami menggunakan fungsi collection.Find() . Metode ini mengembalikan Kursor, Ini menyediakan aliran dokumen yang dapat kita ulangi atau kita bisa mendapatkan semua dokumen dengan fungsi cursor.All() dalam sepotong Book Tipe.

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)

Hapus Dokumen

Kita dapat menghapus dokumen dari koleksi menggunakan fungsi collection.DeleteOne() atau collection.DeleteMany() . Di sini Anda meneruskan bson.D{}} sebagai argumen filter, yang akan cocok dengan semua dokumen dalam koleksi.

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)

Seluruh koleksi dapat dibuang menggunakan fungsi collection.Drop(), ini akan menghapus semua dokumen dan metadata, seperti indeks dari koleksi

Setelah Anda melakukan semua operasi, jangan lupa untuk menutup koneksi MongoDB

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

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

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

Sekarang Anda dapat dengan mudah menggunakan MongoDB sebagai Sumber Data di aplikasi go Anda, Anda dapat menemukan kode lengkap yang digunakan dalam tutorial ini di Repo Github kami


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Hapus elemen dari array bersarang mongodb

  2. MongoDB $isArray

  3. Memesan hasil yang ditetapkan secara acak di mongo

  4. Urutan kenaikan otomatis di mongodb menggunakan Java

  5. Bagaimana cara menggunakan panduan dalam kueri shell mongodb