sql >> Databáze >  >> NoSQL >> MongoDB

Začínáme s ovladačem MongoDB Go Driver

V březnu 2019 byl vydán oficiální ovladač GO pro MongoDB připravený k produkci a od svého spuštění dostává průběžné aktualizace. V tomto tutoriálu se naučíme provádět jednoduché operace MongoDB CRUD pomocí ovladače Go.

Předpoklady

Před zahájením tohoto výukového programu jsou vyžadovány dvě věci.

  • Na vašem počítači by měla být nainstalována aplikace Go. Pro tento tutoriál je použita verze Go 1.15. Balíček Go si můžete stáhnout z tohoto odkazu.
  • Nainstalujte si na svůj počítač nejnovější verzi MongoDB a spusťte místní server MongoDB.

Instalace ovladače MongoDB

Nainstalujte ovladač MongoDB go spuštěním následujícího příkazu:

go get go.mongodb.org/mongo-driver

Pokud používáte moduly Go, vytvořte soubor go.mod a výše uvedený příkaz přidá do souboru mod požadovanou závislost. Tento soubor uzamkne všechny požadavky projektu na správnou verzi.

Nastavení hlavního souboru

Vytvořte soubor main.go ve složce projektu a otevřete jej ve svém IDE. Než napíšeme kód pro operace MongoDB, importujme do souboru všechny potřebné balíčky.

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"

)

Nyní vytvořte následující globální proměnné, které budeme používat ve všech funkcích operace CRUD.

var client *mongo.Client

var collection *mongo.Collection

var ctx = context.TODO()

Vytvořte také strukturu pro typ dokumentu.

type Person struct {

Name string

Age  int

City string

}

Připojování k MongoDB

Nyní je základní nastavení připraveno. Pojďme vytvořit naši první funkci pro připojení k 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

}

Tato funkce nastaví spojení s naším lokálně spuštěným MongoDB a vrátí objekt klienta. Jakmile metoda connect vrátí objekt klienta, můžeme pomocí metody Ping() zkontrolovat, zda bylo připojení úspěšné nebo ne. Pokud metoda Ping() vrátí jakoukoli chybu, můžeme chybu vyvolat a vrátit se.

Operace vložení

Pro vložení pouze jednoho dokumentu můžeme použít metodu insertOne a pro vložení více dokumentů dohromady můžeme použít metodu insertMany. Následuje funkce pro vložení jednoho dokumentu do kolekce Osoba:

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)

}

Zde je funkce pro přidání více dokumentů do sbírky:

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)

}

Pro obě operace musíme použít strukturu Person, kterou jsme vytvořili dříve, a inicializovat ji našimi daty. S funkcí InsertMany budeme vyžadovat předání rozhraní typu pro všechny dokumenty.

Operace načtení

Pro vyhledání dat z kolekce budeme vyžadovat filtr, takže se ujistěte, že jste importovali balíček bson. K vytvoření filtrů pomocí objektů bson použijeme typ bson.D.

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)

}

Stejným způsobem můžeme použít metodu Najít k načtení všech odpovídajících dokumentů.

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

}

Balíček možností můžete použít ke specifikaci možností, jako je limit nebo příkazy.

Provoz aktualizace

Stejné jako metoda FineOne, pro aktualizaci také můžete použít metodu UpdateOne s objektem filtru bson. Tento kód aktualizuje všechny dokumenty se jménem Akash a zvýší hodnotu věku o jeden.

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)

}

Odstranit operaci

Pro odstranění dokumentů z libovolné kolekce můžete použít metodu DeleteOne nebo DeleteMany. Zde také můžeme předat objekty filtru bson, aby odpovídaly dokumentům, a odstranit je.

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)

}

Pokud předáte objekt bson.D{{}} jako parametr filtru, smaže se všechny dokumenty. K odstranění celé kolekce můžete použít metodu collection.Drop().

Jakmile jsou všechny tyto funkce připraveny, můžete je použít ve funkci ovladače podle svých potřeb. Doufejme, že to bude stačit k tomu, abyste mohli začít s psaním funkcí MongoDB v Go. Další informace naleznete v oficiální dokumentaci ovladače Go Mongo.


  1. Jak agregovat podle data, když je v agregačním rámci uvedeno úplné časové razítko?

  2. MongoDB v Azure:Jak vybrat správný typ instance?

  3. Uložení souboru do MongoDB pomocí Multer v Mongoose

  4. Monitorování databáze pomocí ClusterControl