Connessione a MongoDB in Fiber

Mattepuffo's logo
Connessione a MongoDB in Fiber

Connessione a MongoDB in Fiber

In questo articolo vediamo come connetterci ad un db MongoDB in Fiber.

Faremo una sola rotta per l'interrogazione di una tabella, che si occuperà anche di creare dei dati di esempio.

Per fare dei test ho messo anche una riga che cancella ogni volta i dati, mi raccomando di toglierla!!

Prima di tutto installiamo ciò che ci occorre:

go get go.mongodb.org/mongo-driver/mongo
go get go.mongodb.org/mongo-driver/mongo/options
go get github.com/gofiber/fiber/v2

Qui sotto un pò di codice:

package main

import (
	"context"
	"fmt"
	"os"
	"time"

	"github.com/gofiber/fiber/v2"
	"go.mongodb.org/mongo-driver/bson"
	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/options"
)

var collection *mongo.Collection

func main() {
	clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")

	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)

	defer cancel()

	client, err := mongo.Connect(ctx, clientOptions)

	if err != nil {
		fmt.Println(err)
		os.Exit(0)
	}

	collection = client.Database("testdb").Collection("persone")

	// PER TEST!!
	collection.Drop(ctx)

	insertSampleDocuments(ctx)

	app := fiber.New()

	app.Get("/persone", func(c *fiber.Ctx) error {
		cursor, err := collection.Find(context.Background(), bson.D{})
		if err != nil {
			return c.Status(500).SendString("Errore nella query: " + err.Error())
		}

		defer cursor.Close(context.Background())

		var results []bson.M

		if err := cursor.All(context.Background(), &results); err != nil {
			return c.Status(500).SendString("Errore nella lettura dei dati")
		}

		return c.JSON(results)
	})

	app.Listen(":3000")
}

func insertSampleDocuments(ctx context.Context) {
	doc1 := bson.D{
		{"email", "luca@example.com"},
		{"nome", "Luca"},
		{"cognome", "Rossi"},
	}

	doc2 := bson.D{
		{"email", "anna@example.com"},
		{"attivita", bson.A{"calcio", "pittura", "lettura"}},
	}

	doc3 := bson.D{
		{"nome", "Marco"},
		{"cognome", "Bianchi"},
		{"codice_fiscale", "MRCBNC90A01H501Z"},
	}

	_, err := collection.InsertMany(ctx, []interface{}{doc1, doc2, doc3})

	if err != nil {
		fmt.Println(err)
		os.Exit(0)
	}
}

Enjoy!


Condividi

Commentami!