MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Pierwsze kroki ze sterownikiem MongoDB Go

W marcu 2019 r. został wydany oficjalny, gotowy do produkcji sterownik GO dla MongoDB, który od momentu premiery otrzymuje ciągłe aktualizacje. W tym samouczku nauczymy się wykonywać proste operacje CRUD MongoDB za pomocą sterownika Go.

Warunki wstępne

Dwie rzeczy są wymagane przed rozpoczęciem tego samouczka.

  • Go powinno być zainstalowane na twoim komputerze. W tym samouczku jest używana wersja Go 1.15. Możesz pobrać pakiet Go z tego linku.
  • Zainstaluj najnowszą wersję MongoDB na swoim komputerze i uruchom lokalny serwer MongoDB.

Instalacja sterownika MongoDB

Zainstaluj sterownik MongoDB go, uruchamiając następujące polecenie:

go get go.mongodb.org/mongo-driver

Jeśli używasz modułów Go, utwórz plik go.mod, a następnie powyższe polecenie doda wymaganą zależność w pliku mod. Ten plik blokuje wszystkie wymagania projektu do jego prawidłowej wersji.

Konfigurowanie głównego pliku

Utwórz plik main.go w folderze projektu i otwórz go w swoim IDE. Zanim napiszemy kod dla operacji MongoDB, zaimportujmy wszystkie niezbędne pakiety do pliku.

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"

)

Teraz utwórz następujące zmienne globalne, których będziemy używać we wszystkich funkcjach operacji CRUD.

var client *mongo.Client

var collection *mongo.Collection

var ctx = context.TODO()

Utwórz również strukturę dla typu dokumentu.

type Person struct {

Name string

Age  int

City string

}

Łączenie z MongoDB

Teraz konfiguracja podstawowa jest gotowa. Stwórzmy naszą pierwszą funkcję do łączenia się z 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

}

Ta funkcja ustawi połączenie z naszą lokalnie działającą bazą danych MongoDB i zwróci obiekt klienta. Gdy metoda connect zwróci obiekt klienta, możemy użyć metody Ping(), aby sprawdzić, czy połączenie się powiodło, czy nie. Jeśli metoda Ping() zwróci błąd, możemy go zgłosić i zwrócić.

Wstaw operację

Aby wstawić tylko jeden dokument, możemy użyć metody insertOne, a do wstawienia wielu dokumentów razem, możemy użyć metody insertMany. Poniżej znajduje się funkcja wstawiania jednego dokumentu do kolekcji 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)

}

Oto funkcja dodawania wielu dokumentów do kolekcji:

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)

}

Dla obu operacji musimy użyć utworzonej wcześniej struktury Person i zainicjować ją naszymi danymi. Dzięki funkcji InsertMany będziemy musieli przekazać interfejs typu dla wszystkich dokumentów.

Operacja pobierania

W celu znalezienia danych z kolekcji będziemy potrzebować filtru przepustowego, więc upewnij się, że zaimportowałeś pakiet bson. Użyjemy typu bson.D do tworzenia filtrów przy użyciu obiektów bson.

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)

}

W ten sam sposób możemy użyć metody Find, aby pobrać wszystkie pasujące dokumenty.

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

}

Możesz użyć pakietu opcji, aby określić opcje, takie jak limit lub zamówienia.

Operacja aktualizacji

Tak samo jak metoda FineOne, do aktualizacji również możesz użyć metody UpdateOne z obiektem filtrującym bson. Ten kod zaktualizuje wszystkie dokumenty o nazwie Akash i zwiększy wartość Age 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)

}

Usuń operację

Do usuwania dokumentów z dowolnej kolekcji można użyć metody DeleteOne lub DeleteMany. Tutaj również możemy przekazać obiekty filtrujące bson, aby dopasować dokumenty i je usunąć.

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)

}

Jeśli przekażesz obiekt bson.D{{}} jako parametr filtru, usunie on wszystkie dokumenty. Możesz użyć metody collection.Drop(), aby usunąć całą kolekcję.

Gdy wszystkie te funkcje są gotowe, możesz ich używać w funkcji kierowcy zgodnie z potrzebami. Mamy nadzieję, że to wystarczy, aby zacząć pisać funkcje MongoDB w Go. Aby uzyskać więcej informacji, zapoznaj się z oficjalną dokumentacją sterownika Go Mongo.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $godzina

  2. Jak zmienić typ pola?

  3. MongoDb C# GeoNear Query Construction

  4. render_template z wieloma zmiennymi

  5. Importuj dane CSV jako tablicę w MongoDB za pomocą mongoimport