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