返された結果をスキップする
Overview
このガイドでは、MongoDB Kotlin ドライバーを使用した読み取り操作から返された指定された数の結果をスキップする方法を学習できます。
skip()
メソッドを使用して、クエリの返された結果で結果をスキップできます。 また、 $skip
集計ステージを指定して、集計パイプラインの特定のステージでドキュメントをスキップすることもできます。
skip()
メソッドは、 FindFlow によって返されるドキュメントのリストの先頭から省略するドキュメントの数を指定する整数を受け取ります。
次のように、 skip()
メソッドを使用して最初の 2 つのドキュメントをスキップできます。
collection.find().skip(2)
Aggregates.skip() は、集計パイプラインの任意のステージで、前のステージの結果の先頭から省略するドキュメントの数を指定します。
次のように、 Aggregates.skip()
メソッドを使用して最初の 2 つのドキュメントをスキップできます。
val filter = Filters.empty() val results = collection.aggregate(listOf( Aggregates.match(filter), Aggregates.skip(2)) )
例
次の例は、8 色の塗料を販売する塗料店です。 最高の色は他の色よりも早く販売されます。 あるとき、カスタマーが、最も売上がリージョンする(最も少ない)色は何ですかと質問します。 塗料店では、 paint_inventory
コレクションのqty
フィールドで在庫を追跡しています。
{ "_id": 1, "color": "red", "qty": 5 } { "_id": 2, "color": "purple", "qty": 10 } { "_id": 3, "color": "blue", "qty": 9 } { "_id": 4, "color": "white", "qty": 6 } { "_id": 5, "color": "yellow", "qty": 11 } { "_id": 6, "color": "pink", "qty": 3 } { "_id": 7, "color": "green", "qty": 8 } { "_id": 8, "color": "orange", "qty": 7 }
このデータは、次の Kotlin データ クラスでモデル化されます。
data class PaintOrder( val id: Int, val qty: Int, val color: String )
このシナリオに対処するには、塗料店では空のフィルターを使用してpaint_inventory
コレクションをクエリし、ドキュメントをqty
フィールドでソートして、最初の 5 つの結果を省略する必要があります。
FindIterable の使用
val filter = Filters.empty() val results = collection.find(filter) .sort(descending(PaintOrder::qty.name)) .skip(5) results.collect { println(it) }
PaintOrder(id=4, qty=6, color=white) PaintOrder(id=1, qty=5, color=red) PaintOrder(id=6, qty=3, color=pink)
find()
メソッドはすべてのドキュメントを返します。sort()
メソッドでは、qty
フィールドに基づいて最高から最低の順に表示するドキュメントを指定します。skip()
メソッドは を指定して最初の 5 つのドキュメントを省略します。
集計の使用
val filter = Filters.empty() val aggregate = listOf( Aggregates.match(filter), Aggregates.sort(descending(PaintOrder::qty.name)), Aggregates.skip(5) ) val findFlow = collection.aggregate(aggregate) findFlow.collect { println(it) }
PaintOrder(id=4, qty=6, color=white) PaintOrder(id=1, qty=5, color=red) PaintOrder(id=6, qty=3, color=pink)
match()
ステージはすべてのドキュメントを返します。sort()
ステージでは、qty
フィールドに基づいて最高から最低の順に表示するドキュメントを指定します。skip()
ステージでは、最初の 5 つのドキュメントを省略するように指定します。
塗料店がクエリを実行すると、最も売上が高い 3 つの色が、ピン留め、赤色、ホワイトであることが見つかります。
注意
skip の値がクエリにマッチしたドキュメントの数以上の場合、そのクエリはドキュメントを返しません。
前述の例のskip()
メソッドが最初の 9 つのドキュメントをスキップした場合、指定された量が一致したドキュメントの数を超えるため、結果は返されません。
val filter = Filters.empty() val emptyQuery = listOf( Aggregates.match(filter), Aggregates.sort(descending(PaintOrder::qty.name)), Aggregates.skip(9) ) val findFlow = collection.aggregate(emptyQuery) findFlow.collect { println(it) }