Retrieve Data
Overview
このガイドでは、読み取り操作を使用して MongoDB コレクションからデータを検索する方法を学びます。
読み取り操作では、次の操作を実行できます。
サンプル データ
このガイドの例を実行するには、次のスニペットを使用して、これらのドキュメントを tea.ratings
コレクションにロードします。
coll := client.Database("tea").Collection("ratings") docs := []interface{}{ bson.D{{"type", "Masala"}, {"rating", 10}}, bson.D{{"type", "Earl Grey"}, {"rating", 5}}, bson.D{{"type", "Masala"}, {"rating", 7}}, bson.D{{"type", "Earl Grey"}, {"rating", 9}}, } result, err := coll.InsertMany(context.TODO(), docs) if err != nil { panic(err) } fmt.Printf("Number of documents inserted: %d\n", len(result.InsertedIDs))
Tip
存在しないデータベースとコレクション
書き込み操作を実行するときに必要なデータベースとコレクションが存在しない場合は、サーバーが暗黙的にそれらを作成します。
各ドキュメントには、 フィールドとtype
rating
フィールドに対応するお茶の種類の評価が含まれています。
注意
各例ではObjectID
値が切り捨てられます。この値はドライバーが個別に生成するためです。
検索操作
検索操作を使用して、MongoDB からデータを取得します。 Find()
検索操作は、FindOne()
メソッドと メソッドで構成されています。
すべてのドキュメントの検索
Find()
メソッドでは、 Context
型とクエリフィルターを渡す必要があります。 メソッドでは、フィルターに一致するすべてのドキュメントがCursor
タイプとして返されます。
カーソル内のデータにアクセスする方法については、「 カーソルからデータにアクセスする 」を参照してください。
1 つのドキュメントの検索
FindOne()
メソッドでは、 Context
型とクエリフィルターを渡す必要があります。 メソッドは、フィルターに一致する最初のドキュメントをSingleResult
タイプとして返します。
SingleResult
のデータにアクセスする方法については、「アン マーシャリング 」を参照してください。
動作の変更
Find()
とFindOne()
の動作を変更するには、それぞれFindOptions
とFindOneOptions
タイプを渡します。 オプションを指定しない場合、ドライバーは各オプションのデフォルト値を使用します。
両方のタイプで一般的に使用されるオプションは、次の方法で構成できます。
方式 | 説明 |
---|---|
SetCollation() | The type of language collation to use when sorting results. Default: nil |
SetLimit() | The maximum number of documents to return. Default: 0 注意このオプションは |
SetProjection() | The fields to include in the returned documents. Default: nil |
SetSkip() | The number of documents to skip. Default: 0 |
SetSort() | The field and type of sort to order the matched documents. You can specify an ascending or descending sort. Default: none |
例
次の例では、コンテキスト、フィルター、 FindOptions
をFind()
メソッドに渡し、次のアクションを実行します。
一致するドキュメントは、
rating
が5
と10
の間にあるドキュメントです。type
とrating
を返しますが、_id
は除外します
filter := bson.D{ {"$and", bson.A{ bson.D{{"rating", bson.D{{"$gt", 5}}}}, bson.D{{"rating", bson.D{{"$lt", 10}}}}, }}, } projection := bson.D{{"type", 1}, {"rating", 1}, {"_id", 0}} opts := options.Find().SetProjection(projection) cursor, err := coll.Find(context.TODO(), filter, opts) if err != nil { panic(err) } var results []bson.D if err = cursor.All(context.TODO(), &results); err != nil { panic(err) } for _, result := range results { fmt.Println(result) }
例
次の例では、コンテキスト、フィルター、 FindOneOptions
をFindOne()
メソッドに渡し、次のアクションを実行します。
すべてのドキュメントに一致します
rating
フィールドでの降順の並べ替えtype
とrating
を返しますが、_id
は除外します
filter := bson.D{} sort := bson.D{{"rating", -1}} projection := bson.D{{"type", 1}, {"rating", 1}, {"_id", 0}} opts := options.FindOne().SetSort(sort).SetProjection(projection) var result bson.D err := coll.FindOne(context.TODO(), filter, opts).Decode(&result) if err != nil { panic(err) } fmt.Println(result)
集計操作
集計操作を使用して、MongoDB からデータを取得して変換します。 Aggregate()
メソッドを使用して集計操作を実行します。
集計
Aggregate()
メソッドでは、 Context
タイプと集計パイプラインを渡すことが想定されています。 集計パイプラインは、ステージを通じてデータを変換する方法を定義します。 一部のステージは、ドキュメントの一致、フィールドの名前変更、値のグループ化です。
このメソッドでは、 Cursor
タイプの結果ドキュメントが返されます。 $matchステージを省略すると、パイプラインはコレクション内のすべてのドキュメントを使用して続行します。
カーソル内のデータにアクセスする方法については、「 カーソルからデータにアクセスする 」を参照してください。
動作の変更
Aggregate()
メソッドはオプションで、その動作を変更するために使用できるオプションを表すAggregateOptions
タイプを取ります。 オプションを指定しない場合、ドライバーは各オプションのデフォルト値を使用します。
AggregateOptions
タイプでは、次の方法でオプションを設定できます。
方式 | 説明 |
---|---|
SetAllowDiskUse() | Whether to write to temporary files. Default: false |
SetBatchSize() | The number of documents to return in each batch. Default: none |
SetBypassDocumentValidation() | Whether to allow the write to opt-out of document level validation. Default: false |
SetCollation() | The type of language collation to use when sorting results. Default: nil |
SetMaxTime() | The maximum amount of time that the query can run on the server. Default: nil |
SetMaxAwaitTime() | The maximum amount of time for the server to wait on new documents to satisfy a tailable cursor query. Default: nil |
SetComment() | An arbitrary string to help trace the operation through the database profiler, currentOp and logs. Default: "" |
SetHint() | The index to use to scan for documents to retrieve. Default: nil |
SetLet() | Specifies parameters for the aggregate expression, which improves command readability by separating the variables from the query text. Default: none |
例
次の例では、コンテキストと、次のアクションを実行する集計パイプラインを渡します。
レビューをタイプ別にグループ化します
各タイプの平均評価を計算
groupStage := bson.D{ {"$group", bson.D{ {"_id", "$type"}, {"average", bson.D{ {"$avg", "$rating"}, }}, }}} cursor, err := coll.Aggregate(context.TODO(), mongo.Pipeline{groupStage}) if err != nil { panic(err) } var results []bson.M if err = cursor.All(context.TODO(), &results); err != nil { panic(err) } for _, result := range results { fmt.Printf("%v has an average rating of %v \n", result["_id"], result["average"]) }
集計パイプラインの構築方法の詳細については、MongoDB サーバーのマニュアル ページ「集計 」を参照してください。
詳細情報
検索操作の実行可能な例については、次の使用例を参照してください。
上記で説明されている操作の詳細については、次のガイドを参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。