Docs Menu
Docs Home
/ / /
Kotlin コルーチン
/ / /

Retrieve Data

項目一覧

  • Overview
  • find 操作
  • 集計操作

このガイドでは、MongoDB database からデータを取得する方法を学びます。 データを検索するには、 読み取り操作 を使用します。

読み取り操作では、次の操作を実行できます。

  • 検索操作を使用してコレクションからドキュメントのサブセットを取得

  • 集計操作を使用して、コレクションから取得されたドキュメントを変換するの実行

  • 変更ストリームを使用してデータベースへのリアルタイム変更をモニタリング

次のセクションでは、塗料店のオーナーが顧客の注文を管理する方法の例を紹介しています。 所有者は注文ごとに、 paint_orderコレクション内の colorqtyフィールドに対応する色と数量を追跡します。

{ "_id": 1, "color": "purple", "qty": 10 }
{ "_id": 2, "color": "green", "qty": 8 }
{ "_id": 3, "color": "purple", "qty": 4 }
{ "_id": 4, "color": "green", "qty": 11 }

このデータは、次の Kotlin データ クラスでモデル化されます。

data class PaintOrder(
@BsonId val id: Int,
val qty: Int,
val color: String
)

検索操作を使用して、MongoDB 内の既存のデータのサブセットを取得します。 取得するドキュメント、取得する順序、取得する数など、返すデータを指定できます。

検索操作を実行するには、 MongoCollectionのインスタンスでfind()メソッドを呼び出します。 このメソッドは、指定したクエリフィルターに一致するドキュメントをコレクションから検索します。 クエリを指定する方法の詳細については、「 クエリの指定」ガイドを参照してください。

所有者は、 patid_order コレクションから、どの注文に 3 缶より多く、9 容量未満の塗料が含まれているかを調べたいと考えています。

このシナリオに対処するために、所有者は条件に一致する注文を見つけます。

val filter = Filters.and(Filters.gt("qty", 3), Filters.lt("qty", 9))
val resultsFlow = collection.find(filter)
resultsFlow.collect { println(it) }
PaintOrder(id=2, qty=8, color=green)
PaintOrder(id=3, qty=4, color=purple)

所有者がこのクエリを実行すると、条件に一致する注文が 2 つ見つかります。

フィルターを構築する方法の詳細については、フィルター ビルダガイドを参照してください。

実行可能なfind()の例については、複数のドキュメントの検索ページを参照してください。

集計操作を使用して、 集計パイプライン のステージを実行します。 集計パイプラインは、集計結果を生成する複数段階の変換です。

集計操作を実行するには、 MongoCollectionのインスタンスでaggregate()メソッドを呼び出します。 このメソッドは、順番に実行される集計式を受け入れます。 集計を実行するために、ドキュメントを一致させる方法、フィールドの名前を変更する方法、値をグループ化する方法を指定する 集計ステージ を定義できます。 詳細については、集計ガイド を参照してください。

所有者は、 pattern_order コレクション から最も多く購入された(最も多く販売された)塗料の色を確認したいと考えています。

このシナリオに対処するために、所有者は次のような集計パイプラインを作成します。

  • paint_orderコレクション内のすべてのドキュメントと一致します

  • 注文を色別にグループ化

  • 数量フィールドを色別に合計します

  • 結果を最高数量から最低数量の順に並べ替えます

data class AggregationResult(@BsonId val id: String, val qty: Int)
val filter = Filters.empty()
val pipeline = listOf(
Aggregates.match(filter),
Aggregates.group(
"\$color",
Accumulators.sum("qty", "\$qty")
),
Aggregates.sort(Sorts.descending("qty"))
)
val resultsFlow = collection.aggregate<AggregationResult>(pipeline)
resultsFlow.collect { println(it) }
PaintOrder(id=2, qty=8, color=green)
PaintOrder(id=3, qty=4, color=purple)

所有者が集計を実行した後、「緑色」が最も購入された色であることがわかります。

集計パイプラインの構築方法の詳細については、MongoDB サーバーのマニュアル ページ「集計 」を参照してください。

このページで言及されているメソッドについて詳しくは、次の API ドキュメントを参照してください。

戻る

読み取り操作