Questo tutorial introduce le operazioni di base di MongoDB dal punto di vista del linguaggio Golang.

Nota: Questo tutorial utilizza il pacchetto del driver ufficiale del linguaggio Go fornito da MongoDB.

Tutorial Prerequisiti

Tutorial MongoDB

Nota: Se non sei familiare con MongoDB, ti preghiamo di studiare prima le conoscenze di MongoDB. Il tutorial su Golang non ripeterà le conoscenze pertinenti.

Requisiti di base

  • Go 1.10 o versioni successive
  • MongoDB 2.6 o versioni successive

Installazione delle dipendenze

go get go.mongodb.org/mongo-driver/mongo

Connettersi a MongoDB

import (
    "go.mongodb.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/options"
    "go.mongodb.org/mongo-driver/mongo/readpref"
)

// Indirizzo di connessione a MongoDB
uri := "mongodb://localhost:27017"
// Ottieni l'oggetto contesto, puoi impostare un timeout
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()

// Connetti a MongoDB
client, err := mongo.Connect(ctx, options.Client().ApplyURI(uri))

La funzione Connect non blocca il goroutine. Vale a dire, operare direttamente su MongoDB dopo aver chiamato il metodo Connect potrebbe causare un errore perché MongoDB non si è connesso con successo. Puoi usare il metodo Ping per verificare se MongoDB si è connesso con successo.

// Ping di MongoDB, se connesso con successo, non viene restituito alcun errore
err = client.Ping(ctx, readpref.Primary())

Indirizzo di connessione a MongoDB

L'indirizzo di connessione a MongoDB include informazioni importanti come l'indirizzo del server, il numero di porta, l'account e la password. Il formato è il seguente:

mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]

Esempio:

// Connettersi all'indirizzo localhost:27017 con username e password predefiniti
mongodb://localhost:27017

// Connettersi all'indirizzo localhost:27017 con l'account=root, password=123456, e connettersi al database predefinito=admin
mongodb://root:123456@localhost:27017/admin

Rilasciare Risorse di Connessione

Se la connessione non è più necessaria, è necessario rilasciare manualmente le risorse di connessione.

defer func() {
    if err = client.Disconnect(ctx); err != nil {
        panic(err)
    }
}()

Ottenere l'Istanza della Collezione

Per operare su MongoDB in Golang, è necessario ottenere prima l'istanza della collezione, e poi è possibile eseguire operazioni CRUD sull'istanza della collezione.

// Imposta il nome del database attraverso Database e imposta il nome della collezione attraverso Collection
collection := client.Database("testing").Collection("numbers")

Nota: Secondo le caratteristiche di MongoDB, non è necessario creare il database e la collezione in anticipo. Verranno creati automaticamente quando verranno scritti i primi dati.

Inserisci Documento

Inserisci dati usando la funzione InsertOne.

// Oggetto Context, comunemente utilizzato per impostare il timeout della richiesta, è anche possibile riutilizzare l'oggetto Context creato in precedenza, non è necessario ridefinirlo
ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()

// Inserisce il documento, qui utilizziamo il tipo bson.D per descrivere il documento JSON, bson.D rappresenta un array JSON
res, err := collection.InsertOne(ctx, bson.D{{"name", "pi"}, {"value", 3.14159}})

// Ottieni l'id del documento appena aggiunto
id := res.InsertedID

È necessario importare i seguenti package:

import (
    "go.mongodb.org/mongo-driver/bson"
    "go.mongodb.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/options"
    "go.mongodb.org/mongo-driver/mongo/readpref"
)

Nota: In Golang, il package bson viene utilizzato per rappresentare la struttura dati del documento JSON. I capitoli seguenti dettaglieranno l'espressione delle strutture di archiviazione dati di MongoDB in Golang.

pacchetto principale
import (
	context"
	"fmt"
	"time"
	"go.mongodb.org/mongo-driver/bson"
	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/options"
	"go.mongodb.org/mongo-driver/mongo/readpref"
)
func main() {
	// Imposta l'indirizzo di connessione a MongoDB
	uri := "mongodb://root:123456@localhost:27017/admin"
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()
	// Connettiti a MongoDB
	client, err := mongo.Connect(ctx, options.Client().ApplyURI(uri))
	if err != nil {
		panic(err)
	}

	defer func() {
		// Rilascia la connessione con ritardo
		if err = client.Disconnect(ctx); err != nil {
			panic(err)
		}
	}()

	// Verifica se la connessione a MongoDB è avvenuta con successo
	if err := client.Ping(ctx, readpref.Primary()); err != nil {
		panic(err)
	}
	fmt.Println("Connessione a MongoDB avvenuta con successo!")

	// Ottieni la collezione dei numeri
	collection := client.Database("testing").Collection("numbers")

	// Inserisce un documento
	res, err := collection.InsertOne(ctx, bson.D{{"name", "pi"}, {"value", 3.14159}})
	id := res.InsertedID
	fmt.Println("Nuovo Id del documento=", id)
}