Docs Menu

Docs HomeGo

Retrieve Data

項目一覧

  • Overview
  • サンプル データ
  • 検索操作
  • すべてのドキュメントの検索
  • 1 つのドキュメントの検索
  • 動作の変更
  • 集計操作
  • 集計
  • 動作の変更
  • 詳細情報
  • API ドキュメント

このガイドでは、読み取り操作を使用して 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タイプとして返されます。

カーソル内のデータにアクセスする方法については、「 カーソルからデータにアクセスする 」を参照してください。

FindOne()メソッドでは、 Context型とクエリフィルターを渡す必要があります。 メソッドは、フィルターに一致する最初のドキュメントSingleResultタイプとして返します。

SingleResultのデータにアクセスする方法については、「アン マーシャリング 」を参照してください。

Find()FindOne()の動作を変更するには、それぞれFindOptionsFindOneOptionsタイプを渡します。 オプションを指定しない場合、ドライバーは各オプションのデフォルト値を使用します。

両方のタイプで一般的に使用されるオプションは、次の方法で構成できます。

方式
説明
SetCollation()
The type of language collation to use when sorting results.
Default: nil
SetLimit()
The maximum number of documents to return.
Default: 0

注意

このオプションはFindOneOptionsでは使用できません。 FindOne()メソッドは内部的にSetLimit(-1)を使用します。

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

次の例では、コンテキスト、フィルター、 FindOptionsFind()メソッドに渡し、次のアクションを実行します。

  • 一致するドキュメントは、 rating510の間にあるドキュメントです。

  • typeratingを返しますが、 _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)
}

次の例では、コンテキスト、フィルター、 FindOneOptionsFindOne()メソッドに渡し、次のアクションを実行します。

  • すべてのドキュメントに一致します

  • ratingフィールドでの降順の並べ替え

  • typeratingを返しますが、 _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 ドキュメントを参照してください。

←  ドキュメントをカウントカーソルからデータにアクセスする →
フィードバックを送る
© 2022 MongoDB, Inc.

会社概要

© 2022 MongoDB, Inc.