MongoDB поддерживает драйвер для Go - go.mongodb.org/mongo-driver.
Требования
- Go 1.10 или выше
- MongoDB 2.6 или выше
Установка
Рекомендуемый способ начать использовать драйвер MongoDB Go - использовать модули go для установки зависимости в вашем проекте. Это можно сделать, либо импортировав пакеты с go.mongodb.org/mongo-driver и выполнив шаг сборки, чтобы установить зависимость, либо явно запустив
go get go.mongodb.org/mongo-driver/mongo
При использовании версии Go, которая не поддерживает модули, драйвер можно установить с помощью команды dep, запустив
dep ensure -add "go.mongodb.org/mongo-driver/mongo"
Использование
Чтобы начать работу с драйвером, импортируйте пакет mongo, создайте mongo.Client:
import (
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
client, err := mongo.NewClient(options.Client().ApplyURI("mongodb://localhost:27017"))
И подключите его к вашему работающему серверу MongoDB:
ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
err = client.Connect(ctx)
Чтобы сделать это за один шаг, вы можете использовать функцию Connect:
ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))
Вызов Connect не блокирует обнаружение сервера. Если вы хотите узнать, был ли сервер MongoDB найден и подключен, используйте метод Ping:
ctx, _ = context.WithTimeout(context.Background(), 2*time.Second)
err = client.Ping(ctx, readpref.Primary())
Чтобы вставить документ в коллекцию, сначала получите базу данных, а затем экземпляр коллекции с клиента:
collection := client.Database("testing").Collection("numbers")
Затем экземпляр Collection можно использовать для вставки документов:
ctx, _ = context.WithTimeout(context.Background(), 5*time.Second)
res, err := collection.InsertOne(ctx, bson.M{"name": "pi", "value": 3.14159})
id := res.InsertedID
Несколько методов запроса возвращают курсор, который можно использовать так:
ctx, _ = context.WithTimeout(context.Background(), 30*time.Second)
cur, err := collection.Find(ctx, bson.D{})
if err != nil { log.Fatal(err) }
defer cur.Close(ctx)
for cur.Next(ctx) {
var result bson.M
err := cur.Decode(&result)
if err != nil { log.Fatal(err) }
// сделать что-то с результатом....
}
if err := cur.Err(); err != nil {
log.Fatal(err)
}
Для методов, которые возвращают один элемент, возвращается экземпляр SingleResult:
var result struct {
Value float64
}
filter := bson.M{"name": "pi"}
ctx, _ = context.WithTimeout(context.Background(), 5*time.Second)
err = collection.FindOne(ctx, filter).Decode(&result)
if err != nil {
log.Fatal(err)
}
// Делаем что-то с результатом...
Читайте также:
- Система типов Golang
- Работа с базами данных в Golang. Пакет database/sql в Golang
- Пакеты в Golang: объявление, импорт, загрузка, документирование
Комментариев нет:
Отправить комментарий