sql >> Database teknologi >  >> NoSQL >> MongoDB

Brug af MongoDB som datakilde i GoLang

Før du går i gang

Denne vejledning antager, at du har:

  • En grundlæggende forståelse af Go Language
  • Seneste GoLang-version installeret på dit system
  • Seneste MongoDB-version installeret på dit system

I denne vejledning vil vi bruge den officielle MongoDB Go-driver at administrere vores MongoDB-database. I den rette proces vil vi skrive et program for at lære, hvordan man installerer MongoDB Go-driveren og udfører CRUD-operationer med den.

Installation

Kør først nedenstående kommando

i en tom mappe
go mod init gomongo

go mod init opretter en ny go.mod-fil og importerer automatisk afhængigheder, når du vil køre go-programmet. Opret derefter filen main.go og skriv nedenstående kode. Vi vil forklare, hvad denne kode vil gøre på et minut.

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

I ovenstående kode har vi importeret bson-, mongo- og mongo/options-pakkerne af mongo-driver og defineret en Book type, som vil blive brugt i denne øvelse

I hovedfunktionen oprettede vi først clientOptions med MongoDB URL og legitimationsoplysninger og videregiver det til mongo.Connect funktion, når vi først er tilsluttet, kan vi kontrollere vores forbindelse ved at client.Ping funktion.

Følgende kode vil bruge booksCollection variabel for at forespørge books samling fra testdb.

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

Indsæt dokumenter

Lad os først oprette en bogstruktur til at indsætte i samlingen, i koden nedenfor bruger vi collection.InsertOne funktion til at indsætte et enkelt dokument i samlingen

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

For at indsætte flere dokumenter på én gang skal vi oprette et udsnit af Book objekt og send det til 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)

Opdater dokumenter

Vi kan opdatere et enkelt dokument med funktionen collection.UpdateOne . Det kræver et filterdokument for at matche dokumenter i samlingen og et opdateret dokument til at beskrive opdateringshandlingen. Du kan bygge disse ved hjælp af bson.D-typer. Nedenstående kode vil matche bogen med ISBN 0451526341 og forøg kopifeltet med 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)

Du kan også opdatere mere end ét dokument på én gang i en enkelt samling ved funktionen collection.UpdateMany , I den skal vi sende filterdokument og opdatere dokument på samme måde som collection.UpdateOne

Find dokumenter

For at finde et enkelt dokument kan vi bruge funktionen collection.FindOne() , sender vi et filterdokument og afkoder resultatet i Book type 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)

For at finde flere dokumenter bruger vi funktionen collection.Find() . Denne metode returnerer en markør, den giver en strøm af dokumenter, som vi kan gentage, eller vi kan hente alle dokumenterne med funktionen cursor.All() i et stykke Book type.

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)

Slet dokumenter

Vi kan slette dokumenter fra en samling ved hjælp af funktionerne collection.DeleteOne() eller collection.DeleteMany() . Her sender du bson.D{{}} som filterargument, som vil matche alle dokumenter i samlingen.

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)

Hele samlingen kan slettes ved hjælp af collection.Drop()-funktionen, den vil fjerne alle dokumenter og metadata, såsom indekser fra samlingen

Når du har udført hele handlingen, så glem ikke at lukke MongoDB-forbindelsen

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

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

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

Nu kan du nemt bruge MongoDB som datakilde i din go-applikation. Du kan finde den komplette kode, der bruges i denne tutorial på vores Github Repo


  1. Mongoose flere forbindelser

  2. Rails + MongoMapper + EmbeddedDocument formularhjælp

  3. ved at bruge Async i en transaktion i Spring-applikationen

  4. 4 måder at slette et dokument i MongoDB