Avant de commencer
Ce didacticiel suppose que vous avez :
- Une compréhension de base du langage Go
- Dernière version de GoLang installée sur votre système
- Dernière version de MongoDB installée sur votre système
Dans ce tutoriel, nous utiliserons le pilote MongoDB Go officiel pour gérer notre base de données MongoDB. Dans le cadre de la procédure régulière, nous écrirons un programme pour apprendre à installer le pilote MongoDB Go et à effectuer des opérations CRUD avec.
Installation
D'abord dans un dossier vide, exécutez la commande ci-dessous
go mod init gomongo
go mod init
crée un nouveau fichier go.mod et importe automatiquement les dépendances lorsque vous exécuterez le programme go. Créez ensuite le fichier main.go et écrivez le code ci-dessous, nous vous expliquerons ce que ce code fera en une minute.
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")
}
Dans le code ci-dessus, nous avons importé les packages bson, mongo et mongo/options de mongo-driver et défini un Book
type qui sera utilisé dans ce tutoriel
Dans la fonction principale, nous avons d'abord créé clientOptions avec l'URL et les informations d'identification de MongoDB et les avons transmises à mongo.Connect
fonction, Une fois connecté, nous pouvons vérifier notre connexion par client.Ping
fonction.
Le code suivant utilisera booksCollection
variable pour interroger les books
collection de testdb.
booksCollection := client.Database("testdb").Collection("books")
Insérer des documents
Commençons par créer une structure Book à insérer dans la collection, dans le code ci-dessous, nous utilisons collection.InsertOne
fonction pour insérer un seul document dans la collection
// 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)
Pour insérer plusieurs documents à la fois, nous devons créer une tranche de Book
objet et transmettez-le à 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)
Mettre à jour les documents
Nous pouvons mettre à jour un seul document par la fonction collection.UpdateOne
. Il nécessite un document de filtre pour faire correspondre les documents de la collection et un document mis à jour pour décrire l'opération de mise à jour. Vous pouvez les construire en utilisant les types bson.D. Le code ci-dessous correspondra au livre avec ISBN 0451526341 et incrémentez le champ copies de 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)
Vous pouvez également mettre à jour plusieurs documents à la fois dans une seule collection par la fonction
collection.UpdateMany
, Dans celui-ci, nous devons passer le document filtre et mettre à jour le document commecollection.UpdateOne
Rechercher des documents
Pour trouver un seul document, nous pouvons utiliser la fonction collection.FindOne()
, nous passerons un document filtre et décoderons le résultat dans le Book
saisir une variable
// 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)
Pour trouver plusieurs documents, nous utilisons la fonction collection.Find()
. Cette méthode renvoie un curseur, elle fournit un flux de documents sur lequel nous pouvons itérer ou nous pouvons obtenir tous les documents par la fonction cursor.All()
dans une tranche de Book
taper.
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)
Supprimer des documents
Nous pouvons supprimer des documents d'une collection en utilisant les fonctions collection.DeleteOne()
ou collection.DeleteMany()
. Ici, vous passez bson.D{{}} comme argument de filtre, qui correspondra à tous les documents de la collection.
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)
Toute la collection peut être supprimée à l'aide de la fonction collection.Drop(), elle supprimera tous les documents et métadonnées, tels que les index de la collection
Une fois que vous avez effectué toutes les opérations, n'oubliez pas de fermer la connexion MongoDB
err = client.Disconnect(context.TODO())
if err != nil {
log.Fatal(err)
}
fmt.Println("Connection to MongoDB closed.")
Maintenant, vous pouvez facilement utiliser MongoDB comme source de données dans votre application go, vous pouvez trouver le code complet utilisé dans ce tutoriel sur notre Github Repo