Este tutorial introduce las operaciones básicas de MongoDB desde la perspectiva del lenguaje Golang.

Nota: Este tutorial utiliza el paquete oficial del controlador del lenguaje Go proporcionado por MongoDB.

Tutoriales Prerrequisitos

Nota: Si no estás familiarizado con MongoDB, por favor estudia primero el conocimiento de MongoDB. El tutorial de Golang no repetirá el conocimiento relevante.

Requisitos Básicos

  • Go 1.10 o superior
  • MongoDB 2.6 o superior

Instalar Dependencias

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

Conectar a MongoDB

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

// Dirección de conexión a MongoDB
uri := "mongodb://localhost:27017"
// Obtener el objeto de contexto, puedes establecer un tiempo de espera
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()

// Conectar a MongoDB
client, err := mongo.Connect(ctx, options.Client().ApplyURI(uri))

La función Connect no bloquea la goroutine. Es decir, operar directamente MongoDB después de llamar al método Connect puede resultar en un error porque MongoDB no se ha conectado correctamente. Puedes usar el método Ping para verificar si MongoDB se ha conectado correctamente.

// Hacer ping a MongoDB, si se conecta correctamente, no se devuelve ningún error
err = client.Ping(ctx, readpref.Primary())

Dirección de Conexión a MongoDB

La dirección de conexión a MongoDB incluye información importante como la dirección del servidor, el número de puerto, la cuenta y la contraseña. El formato es el siguiente:

mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]

Ejemplo:

// Conectar a la dirección localhost:27017 con el nombre de usuario y contraseña por defecto
mongodb://localhost:27017

// Conectar a la dirección localhost:27017 con la cuenta=root, contraseña=123456, y conectar a la base de datos por defecto=admin
mongodb://root:123456@localhost:27017/admin

Liberar Recursos de Conexión

Si la conexión ya no es necesaria, debes liberar manualmente los recursos de conexión.

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

Obtener Instancia de Colección

Para operar MongoDB en Golang, primero debes obtener la instancia de la colección, y luego podrás realizar operaciones CRUD en la instancia de la colección.

// Establecer el nombre de la base de datos a través de Database, y establecer el nombre de la colección a través de Collection
collection := client.Database("testing").Collection("numbers")

Nota: Según las características de MongoDB, no es necesario crear la base de datos y la colección de antemano. Se crearán automáticamente cuando se escriban los datos.

Insertar documento

Para insertar datos, utiliza la función InsertOne.

// Objeto Context, comúnmente utilizado para establecer el tiempo de espera de la solicitud, también puedes reutilizar el objeto Context creado anteriormente, no es necesario redefinirlo
ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()

// Insertar documento, aquí utilizamos el tipo bson.D para describir el documento JSON, bson.D representa un arreglo JSON
res, err := collection.InsertOne(ctx, bson.D{{"name", "pi"}, {"value", 3.14159}})

// Obtener el ID del documento recién agregado
id := res.InsertedID

Necesitas importar los siguientes paquetes:

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: En Golang, el paquete bson se utiliza para representar la estructura de datos del documento JSON. Los capítulos siguientes detallarán la expresión de las estructuras de almacenamiento de datos de 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() {
	// Establecer la dirección de conexión a MongoDB
	uri := "mongodb://root:123456@localhost:27017/admin"
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()
	// Conectar a MongoDB
	client, err := mongo.Connect(ctx, options.Client().ApplyURI(uri))
	if err != nil {
		panic(err)
	}

	defer func() {
		// Liberar la conexión con retraso
		if err = client.Disconnect(ctx); err != nil {
			panic(err)
		}
	}()

	// Verificar si la conexión a MongoDB fue exitosa
	if err := client.Ping(ctx, readpref.Primary()); err != nil {
		panic(err)
	}
	fmt.Println("¡Conexión a MongoDB exitosa!")

	// Obtener la colección de números
	collection := client.Database("testing").Collection("numbers")

	// Insertar un documento
	res, err := collection.InsertOne(ctx, bson.D{{"name", "pi"}, {"value", 3.14159}})
	id := res.InsertedID
	fmt.Println("Nuevo ID de documento=", id)
}