sql >> Database >  >> NoSQL >> MongoDB

Aan de slag met het MongoDB Go-stuurprogramma

In maart 2019 werd de officiële, productieklare GO-driver voor MongoDB uitgebracht en deze ontvangt vanaf de lancering continue updates. In deze zelfstudie leren we eenvoudige MongoDB CRUD-bewerkingen uit te voeren met behulp van het Go-stuurprogramma.

Vereisten

Er zijn twee dingen vereist voordat we met deze tutorial beginnen.

  • Go moet op je computer zijn geïnstalleerd. Go versie 1.15 wordt gebruikt voor deze tutorial. Je kunt het Go-pakket downloaden via deze link.
  • Installeer de nieuwste versie van MongoDB op uw computer en start de lokale server van MongoDB.

Installatie van het MongoDB-stuurprogramma

Installeer het MongoDB go-stuurprogramma door de volgende opdracht uit te voeren:

go get go.mongodb.org/mongo-driver

Als je Go Modules gebruikt, maak dan een go.mod-bestand aan en dan zal de bovenstaande opdracht de vereiste afhankelijkheid in het mod-bestand toevoegen. Dit bestand vergrendelt alle projectvereisten naar de juiste versie.

Het hoofdbestand instellen

Maak een bestand main.go in je projectmap en open het in je IDE. Voordat we de code voor MongoDB-bewerkingen schrijven, moeten we alle benodigde pakketten in het bestand importeren.

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"

)

Maak nu de volgende globale variabelen die we zullen gebruiken voor alle CRUD-bewerkingsfuncties.

var client *mongo.Client

var collection *mongo.Collection

var ctx = context.TODO()

Maak ook de structuur voor het documenttype.

type Person struct {

Name string

Age  int

City string

}

Verbinding maken met MongoDB

Nu is de basisconfiguratie klaar. Laten we onze eerste functie maken om verbinding te maken met 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

}

Deze functie zal de verbinding opzetten met onze lokaal draaiende MongoDB en het client-object retourneren. Zodra de connect-methode het client-object retourneert, kunnen we de Ping()-methode gebruiken om te controleren of de verbinding succesvol was of niet. Als de methode Ping() een fout retourneert, kunnen we de fout verhogen en terugkeren.

Invoegbewerking

Om slechts één document in te voegen, kunnen we de methode insertOne gebruiken en om meerdere documenten samen in te voegen, kunnen we de methode insertMany gebruiken. Hieronder volgt de functie voor het invoegen van één document in de Persoonsverzameling:

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)

}

Hier is de functie om meerdere documenten aan de verzameling toe te voegen:

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)

}

Voor beide bewerkingen moeten we Person struct gebruiken die we eerder hebben gemaakt en deze initialiseren met onze gegevens. Met de functie InsertMany moeten we de type-interface voor alle documenten doorgeven.

Ophaalbewerking

Voor het vinden van gegevens uit de collectie hebben we een pass-filter nodig, dus zorg ervoor dat je het bson-pakket hebt geïmporteerd. We zullen het type bson.D gebruiken om filters te maken met behulp van bson-objecten.

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)

}

Op dezelfde manier kunnen we de Find-methode gebruiken om alle overeenkomende documenten op te halen.

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

}

U kunt het optiepakket gebruiken om opties zoals limiet of bestellingen op te geven.

Bewerking bijwerken

Hetzelfde als de FineOne-methode, voor update kunt u ook de UpdateOne-methode gebruiken met het bson-filterobject. Deze code werkt alle documenten bij met de naam Akash en verhoogt de waarde van Age met één.

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)

}

Bewerking verwijderen

Voor het verwijderen van documenten uit een verzameling kunt u de methode DeleteOne of DeleteMany gebruiken. Ook hier kunnen we bson-filterobjecten doorgeven om de documenten te matchen en ze te verwijderen.

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)

}

Als u het bson.D{{}}-object als filterparameter doorgeeft, worden alle documenten verwijderd. U kunt de methode collection.Drop() gebruiken om de hele verzameling te verwijderen.

Zodra al deze functies gereed zijn, kunt u ze naar behoefte in uw driverfunctie gebruiken. Hopelijk is dit voldoende om u op weg te helpen met het schrijven van MongoDB-functies in Go. Raadpleeg de officiële documentatie voor de Go Mongo-driver voor meer informatie.


  1. MongoDB $ronde

  2. Hoe u op de juiste manier door een groot json-bestand kunt bladeren

  3. 3 manieren om een ​​index te maken in MongoDB

  4. Hoe voer ik een id-arrayquery uit in Mongoose?