始める前に
このチュートリアルでは、次のことを前提としています。
- GoLanguageの基本的な理解
- システムにインストールされている最新のGoLangバージョン
- システムにインストールされている最新のMongoDBバージョン
このチュートリアルでは、公式のMongoDBGoドライバーを使用します MongoDBデータベースを管理します。適正手続きでは、MongoDB Goドライバーをインストールし、それを使用してCRUD操作を実行する方法を学習するプログラムを作成します。
インストール
最初に空のフォルダで以下のコマンドを実行します
go mod init gomongo
go mod init
新しいgo.modファイルを作成し、goプログラムを実行するときに依存関係を自動的にインポートします。次に、ファイルmain.goを作成し、以下のコードを記述します。このコードが何をするかを簡単に説明します。
package main
import (
"context"
"fmt"
"log"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
// Book - We will be using this Book type to perform crud operations
type Book struct {
Title string
Author string
ISBN string
Publisher string
Copies int
}
func main() {
// Set client options
clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
// Connect to MongoDB
client, err := mongo.Connect(context.TODO(), clientOptions)
if err != nil {
log.Fatal(err)
}
// Check the connection
err = client.Ping(context.TODO(), nil)
if err != nil {
log.Fatal(err)
}
fmt.Println("Connected to MongoDB!")
booksCollection := client.Database("testdb").Collection("books")
}
上記のコードでは、mongo-driverのbson、mongo、mongo / optionsパッケージをインポートし、Book
を定義しました。 このチュートリアルで使用するタイプ
最初のメイン関数では、MongoDBのURLとクレデンシャルを使用してclientOptionsを作成し、それをmongo.Connect
に渡しました。 関数、接続したら、client.Ping
で接続を確認できます 機能。
次のコードはbooksCollection
を使用します books
をクエリする変数 testdbからのコレクション。
booksCollection := client.Database("testdb").Collection("books")
ドキュメントを挿入
まず、コレクションに挿入するBook構造体を作成しましょう。以下のコードでは、collection.InsertOne
を使用しています。 コレクションに単一のドキュメントを挿入する関数
// Insert One document
book1 := Book{"Animal Farm", "George Orwell", "0451526341", "Signet Classics", 100}
insertResult, err := booksCollection.InsertOne(context.TODO(), book1)
if err != nil {
log.Fatal(err)
}
fmt.Println("Inserted a single document: ", insertResult.InsertedID)
複数のドキュメントを一度に挿入するには、Book
のスライスを作成する必要があります オブジェクトを作成し、collection.InsertMany
に渡します
// Insert multiple documents
book2 := Book{"Super Freakonomics", "Steven D. Levitt", "0062312871", "HARPER COLLINS USA", 100}
book3 := Book{"The Alchemist", "Paulo Coelho", "0062315005", "HarperOne", 100}
multipleBooks := []interface{}{book2, book3}
insertManyResult, err := booksCollection.InsertMany(context.TODO(), multipleBooks)
if err != nil {
log.Fatal(err)
}
fmt.Println("Inserted multiple documents: ", insertManyResult.InsertedIDs)
ドキュメントの更新
関数collection.UpdateOne
で1つのドキュメントを更新できます 。コレクション内のドキュメントと一致するフィルタードキュメントと、更新操作を説明する更新されたドキュメントが必要です。これらはbson.Dタイプを使用して構築できます。以下のコードは、本を ISBNと一致させます 0451526341 コピーフィールドを10ずつインクリメントします
//Update one document
filter := bson.D{{"isbn", "0451526341"}}
update := bson.D{
{"$inc", bson.D{
{"copies", 10},
}},
}
updateResult, err := booksCollection.UpdateOne(context.TODO(), filter, update)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Matched %v documents and updated %v documents.\n", updateResult.MatchedCount, updateResult.ModifiedCount)
関数
collection.UpdateMany
を使用して、1つのコレクションで一度に複数のドキュメントを更新することもできます。 、その中で、collection.UpdateOne
と同じようにフィルタードキュメントを渡してドキュメントを更新する必要があります
ドキュメントの検索
単一のドキュメントを検索するには、関数collection.FindOne()
を使用できます。 、フィルタードキュメントを渡し、結果をBook
でデコードします 型変数
// A variable in which result will be decoded
var result Book
err = booksCollection.FindOne(context.TODO(), filter).Decode(&result)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Found a single document: %+v\n", result)
複数のドキュメントを検索するには、関数collection.Find()
を使用します 。このメソッドはカーソルを返します。これは、反復できるドキュメントのストリームを提供するか、関数cursor.All()
によってすべてのドキュメントを取得できます。 Book
のスライスで タイプ。
cursor, err := booksCollection.Find(context.TODO(), bson.D{{}})
if err != nil {
log.Fatal(err)
}
var books []Book
if err = cursor.All(context.TODO(), &books); err != nil {
log.Fatal(err)
}
fmt.Printf("Found multiple documents: %+v\n", books)
ドキュメントを削除
関数collection.DeleteOne()
を使用して、コレクションからドキュメントを削除できます。 またはcollection.DeleteMany()
。ここでは、bson.D {{}}をフィルター引数として渡します。これは、コレクション内のすべてのドキュメントと一致します。
deleteCollection, err := booksCollection.DeleteMany(context.TODO(), bson.D{{}})
if err != nil {
log.Fatal(err)
}
fmt.Printf("Deleted %v documents in the books collection\n", deleteCollection.DeletedCount)
collection.Drop()関数を使用してコレクション全体を削除できます。これにより、コレクションからインデックスなどのすべてのドキュメントとメタデータが削除されます
。
すべての操作が完了したら、MongoDB接続を閉じることを忘れないでください
err = client.Disconnect(context.TODO())
if err != nil {
log.Fatal(err)
}
fmt.Println("Connection to MongoDB closed.")
これで、GoアプリケーションのデータソースとしてMongoDBを簡単に使用できます。このチュートリアルで使用されている完全なコードは、Githubリポジトリにあります
。