Retrieve Data
Overview
このガイドでは、Kotlinドライバーを使用してMongoDBデータベースからデータを取得する方法を学びます。読み取り操作を実行して、MongoDBからデータを取得できます。
読み取り操作を使用すると、次のタスクを実行できます。
検索操作を使用してコレクションからドキュメントのサブセットを取得
集計操作を使用して、コレクションから取得されたドキュメントを変換するの実行
変更ストリームを使用してデータベースへのリアルタイム変更をモニタリング
サンプルデータの例
次のセクションには、塗料 1 缶のカスタマー注文を管理する方法を示す例えが含まれています。注文ごとに、orders
コレクション内のドキュメントの color
フィールドと qty
フィールドに対応する色と数量を追跡します。
{ "_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( val id: Int, val qty: Int, val color: String )
find 操作
検索操作を使用して、MongoDB 内の既存のデータのサブセットを取得します。 取得するドキュメント、取得する順序、取得する数など、返すデータを指定できます。
検索操作を実行するには、find()
のインスタンスでMongoCollection
メソッドを呼び出します。このメソッドは、指定したクエリフィルターに一致するドキュメントをコレクションから検索します。クエリを指定する方法の詳細については、「 クエリの指定 」ガイドを参照してください。
例
どの注文に含まれるのは、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)
Filters
ビルダの詳細については、「 フィルター ビルダガイド 」を参照してください。
find()
実行可能な の例については、「 複数のドキュメントの検索の使用例 」を参照してください。
集計操作
集計操作 を使用して、データに対して集計パイプラインを実行します。集計パイプラインは、集計結果を生成する複数段階の変換です。
集計操作を実行するには、aggregate()
のインスタンスでMongoCollection
メソッドを呼び出します。このメソッドは、順番に実行される集計式を受け入れます。集計を実行するために、ドキュメントを一致させる方法、フィールドの名前を変更する方法、値をグループ化する方法を指定する集計ステージ を定義できます。詳細については、「 集計ガイド 」を参照してください。
例
最も多く購入されている色を見つけて、どの塗料が最も人気があるかを調べます。
次のアクションを実行する集計パイプラインを作成できます。
orders
コレクション内のすべてのドキュメントと一致します注文を色別にグループ化
数量フィールドを色別に合計します
結果を最高数量から最低数量の順に並べ替えます
data class AggregationResult( 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=19, color=green) PaintOrder(id=3, qty=14, color=purple)
集計パイプラインの構築の詳細については、サーバー マニュアルの「集計」を参照してください。
このページで言及されているメソッドについて詳しくは、次のAPIドキュメントを参照してください。