Ce tutoriel présente les opérations de base de MongoDB du point de vue du langage Golang.

Remarque : Ce tutoriel utilise le package pilote officiel de MongoDB pour le langage Go.

Tutoriels Prérequis

Tutoriel MongoDB

Remarque : Si vous n'êtes pas familier avec MongoDB, veuillez d'abord étudier les connaissances de MongoDB. Le tutoriel Golang ne répétera pas les connaissances pertinentes.

Exigences de base

  • Go 1.10 ou supérieur
  • MongoDB 2.6 ou supérieur

Installer les Dépendances

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

Se Connecter à MongoDB

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

// Adresse de connexion MongoDB
uri := "mongodb://localhost:27017"
// Obtenez l'objet de contexte, vous pouvez définir une durée limite
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()

// Se connecter à MongoDB
client, err := mongo.Connect(ctx, options.Client().ApplyURI(uri))

La fonction Connect ne bloque pas le goroutine. Autrement dit, opérer directement sur MongoDB après avoir appelé la méthode Connect peut entraîner une erreur car MongoDB n'a pas été connecté avec succès. Vous pouvez utiliser la méthode Ping pour vérifier si MongoDB s'est connecté avec succès.

// Pinger MongoDB, s'il s'est connecté avec succès, aucune erreur n'est renvoyée
err = client.Ping(ctx, readpref.Primary())

Adresse de Connexion MongoDB

L'adresse de connexion MongoDB inclut des informations importantes telles que l'adresse du serveur, le numéro de port, le compte et le mot de passe. Le format est le suivant :

mongodb://[nom_utilisateur:mot_de_passe@]hôte1[:port1][,...hôteN[:portN]][/[baseauthpardefaut][?options]]

Exemple :

// Se connecter à l'adresse localhost:27017 avec le nom d'utilisateur et le mot de passe par défaut
mongodb://localhost:27017

// Se connecter à l'adresse localhost:27017 avec le compte=root, mot de passe=123456, et se connecter à la base de données par défaut=admin
mongodb://root:123456@localhost:27017/admin

Libérer les Ressources de Connexion

Si la connexion n'est plus nécessaire, vous devez libérer manuellement les ressources de connexion.

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

Obtenir l'Instance de Collection

Pour opérer MongoDB en Golang, vous devez d'abord obtenir l'instance de collection, puis vous pourrez effectuer des opérations CRUD sur l'instance de collection.

// Définissez le nom de la base de données via Database, et définissez le nom de la collection via Collection
collection := client.Database("testing").Collection("numbers")

Remarque : Selon les caractéristiques de MongoDB, il n'est pas nécessaire de créer la base de données et la collection à l'avance. Elles seront créées automatiquement lors de la première écriture des données.

Insérer un document

Insérez des données en utilisant la fonction InsertOne.

// Objet contexte, couramment utilisé pour définir le délai de la requête, vous pouvez également réutiliser l'objet contexte créé précédemment, pas besoin de le redéfinir
ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()

// Insérer le document, ici nous utilisons le type bson.D pour décrire le document JSON, bson.D représente un tableau JSON
res, err := collection.InsertOne(ctx, bson.D{{"name", "pi"}, {"value", 3.14159}})

// Obtenir l'identifiant du nouveau document ajouté
id := res.InsertedID

Vous devez importer les packages suivants:

import (
	"context"
	"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"
)

Remarque : En Golang, le package bson est utilisé pour représenter la structure de données du document JSON. Les chapitres suivants détailleront l'expression des structures de stockage de données MongoDB en Golang.

package main
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() {
	// Définir l'adresse de connexion à MongoDB
	uri := "mongodb://root:123456@localhost:27017/admin"
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()
	// Se connecter à MongoDB
	client, err := mongo.Connect(ctx, options.Client().ApplyURI(uri))
	if err != nil {
		panic(err)
	}

	defer func() {
		// Libérer la connexion avec un délai
		if err = client.Disconnect(ctx); err != nil {
			panic(err)
		}
	}()

	// Vérifier si la connexion à MongoDB a réussi
	if err := client.Ping(ctx, readpref.Primary()); err != nil {
		panic(err)
	}
	fmt.Println("Connexion à MongoDB réussie !")

	// Obtenir la collection numbers
	collection := client.Database("testing").Collection("numbers")

	// Insérer un document
	res, err := collection.InsertOne(ctx, bson.D{{"name", "pi"}, {"value", 3.14159}})
	id := res.InsertedID
	fmt.Println("Nouvel identifiant du document =", id)
}