Golang では、MongoDB へのクエリは非常に重要なタスクです。 mgo は、CRUD 操作用の豊富な API を提供する非常に人気のある MongoDB ドライバーです。この記事では、mgo を使用して MongoDB にクエリを実行する方法を紹介します。
mgo のインストール
mgo を使用するには、まず mgo をインストールする必要があります。 go get コマンドを使用してインストールできます。ターミナルを開いて次のコマンドを実行します:
go get gopkg.in/mgo.v2
これにより、Github リポジトリから mgo がダウンロードされ、Golang プロジェクトのベンダー ディレクトリに追加されます。
mgo パッケージのインポート
コードで mgo を使用する場合は、そのパッケージをインポートする必要があります。ファイルの先頭に次のコードを記述して、mgo パッケージをインポートし、そのエイリアスを作成できます。
import (
"gopkg.in/mgo.v2" "gopkg.in/mgo.v2/bson"
)
コレクション内のドキュメントのクエリ
MongoDB のクエリは、コレクション内のドキュメントのクエリから始まります。 mgo.Collection の Find() メソッドを使用すると、コレクション内のドキュメントをクエリできます。基本的なクエリの例をいくつか示します。
条件付きフィルターを追加したくない場合は、Find() メソッドを使用してコレクション内のすべてのドキュメントを返すことができます。
func getAllEmployees() ([]Employee, error) {
session := GetSession() defer session.Close() collection := session.DB("company").C("employees") var employees []Employee err := collection.Find(nil).All(&employees) return employees, err
}
上記のコードでは、session.DB() メソッドを使用してデータベースを開きます。をクリックして、操作対象のコレクションを選択します。 Find() メソッドは、基準を満たすすべてのドキュメントを取得するために使用できるカーソルを返します。 All() メソッドは、指定されたスライスにすべてのドキュメントを読み取り、エラーを返します。
条件付きドキュメントを渡すことで、返されたドキュメントをフィルタリングできます。以下は、給与が 1000 を超える従業員をクエリする例です。
func getEmployeesWithSalaryGreaterThan1000() ([]Employee, error) {
session := GetSession() defer session.Close() collection := session.DB("company").C("employees") var employees []Employee err := collection.Find(bson.M{"salary": bson.M{"$gt": 1000}}).All(&employees) return employees, err
}
上記の例コードの bson.M は MongoDB 内のドキュメントを表します。生成される条件ドキュメントは、
{
"salary": { "$gt": 1000 }
}
です。上記の条件により、給与が 1,000 ドルを超えるすべての従業員が除外されます。 Find() メソッドで、条件付きドキュメントをパラメータとして渡します。 $gt 演算子は「より大きい」を意味します。
Select() メソッドを使用すると、返されるフィールドを指定できます。以下に示すように:
func getEmployeeNameAndAge() ([]Employee, error) {
session := GetSession() defer session.Close() collection := session.DB("company").C("employees") var employees []Employee err := collection.Find(nil).Select(bson.M{"name": 1, "age": 1}).All(&employees) return employees, err
}
上記のコードでは、Select() メソッドを使用して選択します。返されたフィールド。この例では、名前と年齢が返されます。
注: 少なくとも 1 つのフィールドを 1 に設定する必要があります。すべてのフィールドが 0 に設定されている場合、クエリは空のドキュメントを返します。
Skip() メソッドと Limit() メソッドを使用して、結果をページ分割します。以下に示すように:
func getPaginatedEmployees(page int, limit int) ([]Employee, error) {
session := GetSession() defer session.Close() collection := session.DB("company").C("employees") var employees []Employee err := collection.Find(nil).Skip((page - 1) * limit).Limit(limit).All(&employees) return employees, err
}
上記のコードでは、Skip() メソッドは、指定された数のドキュメントをスキップするために使用され、Limit() メソッドは返されるドキュメントの数を指定します。
概要
この記事では、mgo を使用して Golang で MongoDB にクエリを実行する方法を紹介します。 Find() メソッドを使用してコレクション内のドキュメントをクエリし、フィルタリングとページングのオプションを渡すことで返されるドキュメントを制限します。特定のフィールドのみを返すには、Select() メソッドを使用します。 mgo は、必要に応じて使用できる他のクエリ メソッドとオプションも提供します。
以上がmgo を使用して golang で MongoDB にクエリを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。