Este tutorial apresenta as operações básicas do MongoDB na perspectiva da linguagem Golang.
Nota: Este tutorial utiliza o pacote de driver oficial da linguagem Go fornecido pelo MongoDB.
Tutoriais Prévios
Nota: Se não estiver familiarizado com o MongoDB, por favor estude primeiro o conhecimento do MongoDB. O tutorial do Golang não repetirá o conhecimento relevante.
Requisitos Básicos
- Go 1.10 ou superior
- MongoDB 2.6 ou superior
Instalar Dependências
go get go.mongodb.org/mongo-driver/mongo
Conectar ao MongoDB
import (
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"go.mongodb.org/mongo-driver/mongo/readpref"
)
// Endereço de conexão MongoDB
uri := "mongodb://localhost:27017"
// Obter o objeto de contexto, você pode definir um timeout
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
// Conectar ao MongoDB
client, err := mongo.Connect(ctx, options.Client().ApplyURI(uri))
A função Connect não bloqueia a goroutine. Ou seja, operar diretamente o MongoDB após chamar o método de Conectar pode resultar em um erro porque o MongoDB ainda não foi conectado com sucesso. Você pode usar o método Ping para verificar se o MongoDB foi conectado com sucesso.
// Ping no MongoDB, se conectado com sucesso, não retorna erro
err = client.Ping(ctx, readpref.Primary())
Endereço de Conexão MongoDB
O endereço de conexão MongoDB inclui informações importantes como o endereço do servidor, número da porta, conta e senha. O formato é o seguinte:
mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]
Exemplo:
// Conecta ao endereço localhost:27017 com o nome de usuário e senha padrão
mongodb://localhost:27017
// Conecta ao endereço localhost:27017 com a conta=root, senha=123456 e conecta ao banco de dados padrão=admin
mongodb://root:123456@localhost:27017/admin
Liberar Recursos de Conexão
Se a conexão não for mais necessária, você precisa liberar manualmente os recursos de conexão.
defer func() {
if err = client.Disconnect(ctx); err != nil {
panic(err)
}
}()
Obter Instância da Coleção
Para operar o MongoDB em Golang, você precisa obter primeiro a instância da coleção e depois pode realizar operações CRUD na instância da coleção.
// Defina o nome do banco de dados através de Database e o nome da coleção através de Collection
coleção := client.Database("teste").Collection("números")
Nota: De acordo com as características do MongoDB, não é necessário criar o banco de dados e a coleção antecipadamente. Eles serão criados automaticamente quando os dados forem escritos pela primeira vez.
Inserir Documento
Utilize a função InsertOne para inserir dados.
// Objeto de contexto, comumente usado para definir o tempo limite da requisição, você também pode reutilizar o objeto de contexto criado anteriormente, sem necessidade de redefini-lo
ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
// Inserir documento, aqui utilizamos o tipo bson.D para descrever o documento JSON, bson.D representa um array JSON
res, err := collection.InsertOne(ctx, bson.D{{"name", "pi"}, {"value", 3.14159}})
// Obter o ID do documento recém-adicionado
id := res.InsertedID
Você precisa importar os seguintes pacotes:
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: Em Golang, o pacote bson é utilizado para representar a estrutura de dados do documento JSON. Os próximos capítulos detalharão a expressão das estruturas de armazenamento de dados do MongoDB em 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() {
// Definir o endereço de conexão com o MongoDB
uri := "mongodb://root:123456@localhost:27017/admin"
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
// Conectar ao MongoDB
client, err := mongo.Connect(ctx, options.Client().ApplyURI(uri))
if err != nil {
panic(err)
}
defer func() {
// Liberar a conexão com atraso
if err = client.Disconnect(ctx); err != nil {
panic(err)
}
}()
// Verificar se a conexão com o MongoDB foi bem-sucedida
if err := client.Ping(ctx, readpref.Primary()); err != nil {
panic(err)
}
fmt.Println("Conexão com o MongoDB estabelecida com sucesso!")
// Obter a coleção de números
collection := client.Database("testing").Collection("numbers")
// Inserir um documento
res, err := collection.InsertOne(ctx, bson.D{{"name", "pi"}, {"value", 3.14159}})
id := res.InsertedID
fmt.Println("Novo ID do documento=", id)
}