MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Използване на MongoDB като източник на данни в GoLang

Преди да започнете

Този урок предполага, че имате:

  • Основно разбиране на езика Go
  • Най-новата версия на GoLang, инсталирана на вашата система
  • Последната версия на MongoDB, инсталирана на вашата система

В този урок ще използваме официалния драйвер MongoDB Go за управление на нашата база данни MongoDB. В надлежния процес ще напишем програма, за да научим как да инсталираме MongoDB Go Driver и да изпълняваме CRUD операции с него.

Инсталиране

Първо в празна папка изпълнете командата по-долу

go mod init gomongo

go mod init създава нов файл go.mod и автоматично импортира зависимости, когато стартирате програмата go. След това създайте файла main.go и напишете кода по-долу. Ще обясним какво ще направи този код след минута.

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

В горния код импортирахме пакетите bson, mongo и mongo/options на mongo-driver и дефинирахме Book тип, който ще се използва в този урок

Първо в основната функция създадохме clientOptions с URL адрес на MongoDB и идентификационни данни и ги предадохме на mongo.Connect функция, След като се свържем, можем да проверим връзката си чрез client.Ping функция.

Следният код ще използва booksCollection променлива за запитване на books колекция от testdb.

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

Вмъкване на документи

Първо нека създадем структура Book, която да вмъкнем в колекцията, в кода по-долу използваме collection.InsertOne функция за вмъкване на един документ в колекцията

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

За да вмъкнем няколко документа наведнъж, трябва да създадем отрязък от Book обект и го предайте на 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)

Актуализиране на документи

Можем да актуализираме един документ чрез функция collection.UpdateOne . Той изисква филтърен документ, за да съпостави документи в колекцията, и актуализиран документ, за да опише операцията за актуализиране. Можете да ги изградите с помощта на типове bson.D. Кодът по-долу ще съответства на книгата с ISBN 0451526341 и увеличете полето за копия с 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)

Можете също така да актуализирате повече от един документ наведнъж в една колекция чрез функция collection.UpdateMany , В него трябва да предадем филтърен документ и да актуализираме документа като collection.UpdateOne

Намиране на документи

За да намерим един документ, можем да използваме функцията collection.FindOne() , ще предадем филтърен документ и ще декодираме резултата в Book тип променлива

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

За да намерим множество документи, използваме функцията collection.Find() . Този метод връща курсор, осигурява поток от документи, върху които можем да повторим или можем да получим всички документи чрез функция cursor.All() в парче от Book Тип.

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)

Изтриване на документи

Можем да изтрием документи от колекция с помощта на функции collection.DeleteOne() или collection.DeleteMany() . Тук предавате bson.D{{}} като аргумент за филтър, който ще съответства на всички документи в колекцията.

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)

Цялата колекция може да бъде премахната с помощта на функцията collection.Drop(), тя ще премахне всички документи и метаданни, като индекси от колекцията

След като извършите цялата операция, не забравяйте да затворите връзката с MongoDB

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

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

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

Сега можете лесно да използвате MongoDB като източник на данни във вашето go приложение, Можете да намерите пълния код, използван в този урок, в нашето Github Repo


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да попълним поддокумент в mongoose след създаването му?

  2. MongoDB $min

  3. Вмъкване на речник в MongoDB с c# драйвер

  4. MongoDB да използва разделяне с $lookup оператор за агрегиране

  5. MongoDB:Твърде много позиционни (т.е. „$“) елементи, открити в пътя