GO: Anbindung MongoDB

Hier eine kurze Zusammenfassung der typischen CRUD Aktionen gegen eine MongoDB mit GO.

Installation MongoDB Package

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

Beispiele

package main

import (
	"context"
	"encoding/json"
	"fmt"
	"log"
	"reflect"
	"time"

	"go.mongodb.org/mongo-driver/bson"
	"go.mongodb.org/mongo-driver/bson/primitive"
	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/options"
)

type DVD struct {
	ID       primitive.ObjectID `json:"_id" bson:"_id,omitempty"`
	Title    string             `bson:"title",json:"title"`
	Year     int                `bson:"year",json:"year"`
	Director string             `bson:"director",json:"director"`
	Genre    string             `bson:"genre",json:"genre"`
}

func main() {

	// Connect
	client, err := mongo.NewClient(options.Client().ApplyURI(("mongodb://127.0.0.1:27017")))
	
        if err != nil {
		log.Panic(err)
	}

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

	err = client.Connect(ctx)

	if err != nil {
		log.Panic(err)
	}

	defer client.Disconnect(ctx)

	db := client.Database("lab")
	col := db.Collection("dvds")

	// Create Record
	record := DVD{
		Title:    "Jonny is here",
		Year:     2022,
		Director: "Krusty the clown",
		Genre:    "Comedy",
	}

	resultid, err := col.InsertOne(ctx, record)

	if err != nil {
		log.Panic(err)
	}

	fmt.Println("Result")
	fmt.Println(resultid)

	// Get Record
	filter := bson.D{{"year", 2022}}

	var result DVD

	err = col.FindOne(ctx, filter).Decode(&result)

	if err != nil {
		log.Panic(err)
	}

	fmt.Println("Result:")
	fmt.Println(result)

	// Get Records
	var results []DVD

	cursor, err := col.Find(ctx, bson.D{})

	if err = cursor.All(ctx, &results); err != nil {
		log.Panic(err)
	}

	for _, result := range results {

		output, err := json.MarshalIndent(result, "", "    ")

		if err != nil {
			log.Panic(err)
		}

		fmt.Printf("%s\n", output)
	}

	// Update Record
	id, _ := primitive.ObjectIDFromHex("63721740e3cded090bb5311e")
	ufilter := bson.D{{"_id", id}}
	update := bson.D{{"$set", bson.D{{"title", "Foobar"}}}}
	uresult, err := col.UpdateOne(ctx, ufilter, update)
	if err != nil {
		log.Panic(err)
	}

	fmt.Println("Update")
	fmt.Printf("%v\n", uresult)

	// Delete Record
	did, _ := primitive.ObjectIDFromHex("637219f767b9212d8e91ef13")

	res, err := col.DeleteOne(ctx, bson.M{"_id": did})

	if err != nil {
		log.Panic(err)
	}

	fmt.Println("DeleteOne Result TYPE:", reflect.TypeOf(res))

}

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.