Golang は、高速、簡潔、安全かつ効率的なプログラミング言語であり、広く注目され、応用されています。 MongoDB はスキーマのないドキュメントベースのデータベースであり、最新のアプリケーションに推奨されるデータベースの 1 つです。 Golang と MongoDB を組み合わせると、開発者に多くのメリットがもたらされます。この記事では、Golang を使用して MongoDB にクエリを実行する方法を説明します。
まず、MongoDB の基本的な知識を理解する必要があります。 MongoDB のデータ保存方法はドキュメントであり、ドキュメントはキーと値のペアのコレクションです。ドキュメントの例を次に示します。
{ "_id": ObjectId("507f1f77bcf86cd799439011"), "name": "John", "age": 25, "city": "New York", "phone": { "office": "123-456-7890", "home": "987-654-3210" }, "email": "john@example.com", "interests": ["swimming", "reading", "traveling"] }
このドキュメントには、一意の識別子「_id」とその他のキーと値のペアがあります。値には、文字列、数値、ブール値などの単純な型もあれば、配列、ネストされたドキュメントなどの複雑なデータ型も使用できます。 MongoDB の詳細については、MongoDB の公式ドキュメントを参照してください。
次に、Golang を使用して MongoDB にクエリを実行する方法を学びます。例では、公式の MongoDB Go ドライバー (mongo-go-driver) を使用します。このドライバーは、MongoDB と簡単に対話するための機能豊富なツールのセットを提供します。
まず、mongo-go-driver をインストールする必要があります:
go get go.mongodb.org/mongo-driver/mongo
次に、次のコードを使用して MongoDB への接続を確立できます:
package main import ( "context" "fmt" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) func main() { // 设置客户端选项 clientOptions := options.Client().ApplyURI("mongodb://localhost:27017") // 连接到MongoDB client, err := mongo.Connect(context.Background(), clientOptions) if err != nil { fmt.Println("连接到MongoDB时出错:", err) } // 断开与MongoDB的连接 defer func() { if err = client.Disconnect(context.Background()); err != nil { panic(err) } }() }
上記ではコードでは、まず options.Client()
メソッドを使用してクライアント オプションを作成します。ここでは、ローカル MongoDB サービスに接続するように指定します。ポートは 27017 です。次に、mongo.Connect()
メソッドを使用して MongoDB に接続し、エラーがあるかどうかを確認します。最後に、client.Disconnect()
メソッドを使用して MongoDB から切断します。
MongoDB への接続を確立したので、いくつかの一般的なクエリ操作を見ていきます。
1. すべてのドキュメントの検索
Collection.Find()
メソッドを使用して、指定された条件に一致するすべてのドキュメントを検索できます。以下に例を示します。
collection := client.Database("myDatabase").Collection("myCollection") cursor, err := collection.Find(context.Background(), bson.D{}) if err != nil { fmt.Println("查询文档时出错:", err) } defer cursor.Close(context.Background()) for cursor.Next(context.Background()) { var doc bson.M if err := cursor.Decode(&doc); err != nil { fmt.Println("解码文档时出错:", err) } fmt.Println(doc) } if err := cursor.Err(); err != nil { fmt.Println("游标错误:", err) }
上記のコードでは、最初にコレクション (Collection
) オブジェクトを取得し、Find()
メソッドを使用してそれを検索します。すべてのドキュメントのカーソルが返されます。エラーが発生した場合、コンソールにエラー情報が出力されます。次に、カーソルの Decode()
メソッドを使用して各ドキュメントをデコードし、コンソールに出力します。
2. 返されるドキュメントの数を制限する
Find()
メソッドの Limit()
関数を使用して数を制限できます。返された書類の数。以下に例を示します。
cursor, err := collection.Find(context.Background(), bson.D{}, options.Find().SetLimit(2)) if err != nil { fmt.Println("查询文档时出错:", err) }
ここでは、2 つのドキュメントのみが返されることを指定します。必要に応じてこの番号を変更できます。
3. 指定されたフィールドのみを返す
Find()
メソッドの Project()
関数を使用して、指定されたフィールドのみを返すことができます。以下に例を示します。
cursor, err := collection.Find(context.Background(), bson.D{}, options.Find().SetProjection(bson.D{{"name", 1}, {"age", 1}})) if err != nil { fmt.Println("查询文档时出错:", err) }
ここでは、「名前」フィールドと「年齢」フィールドのみが返されることを指定します。
4. 特定の条件に基づくクエリ
Find()
メソッドの Filter()
関数を使用して、特定の条件に基づいてクエリを実行できます。条件。以下は例です:
cursor, err := collection.Find(context.Background(), bson.D{{"age", bson.D{{"$gt", 20}}}}) if err != nil { fmt.Println("查询文档时出错:", err) }
ここでは、「年齢」が 20 を超えるすべてのドキュメントを検索するように指定します。
5. 正規表現の使用
タイプ bson.RegEx
の値を使用して、正規表現を使用したあいまいクエリを実行できます。以下に例を示します。
cursor, err := collection.Find(context.Background(), bson.D{{"name", bson.Regex{Pattern: "jo", Options: ""}}}) if err != nil { fmt.Println("查询文档时出错:", err) }
ここでは、「name」フィールドに「jo」を含むすべてのドキュメントを検索するように指定します。
6. クエリ結果の並べ替え
Find()
メソッドの Sort()
関数を使用して、次に従ってクエリ結果を並べ替えることができます。特定の条件。例を次に示します。
cursor, err := collection.Find(context.Background(), bson.D{}, options.Find().SetSort(bson.D{{"age", 1}})) if err != nil { fmt.Println("查询文档时出错:", err) }
ここでは、クエリ結果が「年齢」フィールドの昇順 (1) で並べ替えられるように指定します。
7. 集計パイプラインの使用
より複雑なクエリの場合は、MongoDB の集計フレームワークを使用できます。以下は、集約パイプラインを含む例です。
pipeline := bson.A{ bson.D{{"$match", bson.D{{"age", bson.D{{"$gt", 20}}}}}}, bson.D{{"$group", bson.D{{"_id", "$city"}, {"count", bson.D{{"$sum", 1}}}}}}, bson.D{{"$sort", bson.D{{"count", -1}}}}, } cursor, err := collection.Aggregate(context.Background(), pipeline) if err != nil { fmt.Println("聚合查询时出错:", err) }
ここでは、bson.A
タイプを使用して集約パイプラインを指定します。これには、3 つのステージが含まれます: $match
match、 $group
グループ化と$sort
並べ替え。パイプラインは、age
が 20 を超えるすべてのドキュメントを検索し、都市ごとにグループ化し、グループごとにドキュメントの数を数えます。最後に、結果はドキュメント数の降順に並べ替えられます。
これらの MongoDBGolang クエリ操作に習熟すると、開発者は MongoDB 内のデータをより効果的に処理し、開発効率を向上させることができます。同時に、インデックス作成、更新、削除などの他の MongoDB 機能も使用できます。
以上がgolangクエリモンゴの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。