返された結果をスキップする
Overview
このガイドでは、MongoDB Java ドライバーを使用して、読み取り操作から返された指定された数の結果をスキップする方法を学習します。
skip()
メソッドを使用して、クエリの返された結果で結果をスキップできます。 また、 $skip
集計ステージを指定して、集計パイプラインの特定のステージでドキュメントをスキップすることもできます。
skip()
メソッドは、 FindIterable によって返されるドキュメントのリストの先頭から省略するドキュメントの数を指定する整数を受け取ります。
次のように、 skip()
メソッドを使用して最初の 2 つのドキュメントをスキップできます。
collection.find().skip(2);
Aggregates.skip() は、集計パイプラインの任意のステージで、前のステージの結果の先頭から省略するドキュメントの数を指定します。
次のように、 Aggregates.skip()
メソッドを使用して最初の 2 つのドキュメントをスキップできます。
import com.mongodb.client.model.Aggregates; collection.aggregate(Arrays.asList(Aggregates.match(), 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 }
このシナリオに対処するには、塗料店では空のフィルターを使用してpaint_inventory
コレクションをクエリし、ドキュメントをqty
フィールドでソートして、最初の 5 つの結果を省略する必要があります。
FindIterable の使用
import com.mongodb.client.model.Filters; import com.mongodb.client.model.Sorts; // <MongoCollection setup code here> Bson filter = Filters.empty(); collection.find(filter) .sort(Sorts.descending("qty")) .skip(5) .forEach(doc -> System.out.println(doc.toJson()));
find()
メソッドはすべてのドキュメントを返します。sort()
メソッドでは、qty
フィールドに基づいて最高から最低の順に表示するドキュメントを指定します。skip()
メソッドは を指定して最初の 5 つのドキュメントを省略します。
集計の使用
import com.mongodb.client.model.Filters; import com.mongodb.client.model.Sorts; import com.mongodb.client.model.Aggregates; // <MongoCollection setup code here> Bson filter = Filters.empty(); collection.aggregate(Arrays.asList( Aggregates.match(filter), Aggregates.sort(Sorts.descending("qty")), Aggregates.skip(5))) .forEach(doc -> System.out.println(doc.toJson()));
match()
ステージはすべてのドキュメントを返します。sort()
ステージでは、qty
フィールドに基づいて最高から最低の順に表示するドキュメントを指定します。skip()
ステージでは、最初の 5 つのドキュメントを省略するように指定します。
次に、前述の両方のクエリの出力を示します。
{ "_id": 4, "color": "white", "qty": 6 } { "_id": 1, "color": "red", "qty": 5 } { "_id": 6, "color": "pink", "qty": 3 }
塗料店がクエリを実行すると、最も売上が高い 3 つの色が、ピン留め、赤色、ホワイトであることが見つかります。
注意
skip の値がクエリにマッチしたドキュメントの数以上の場合、そのクエリはドキュメントを返しません。
前述の例のskip()
メソッドが最初の 9 つのドキュメントをスキップした場合、指定された量が一致したドキュメントの数を超えるため、結果は返されません。
Bson filter = Filters.empty(); collection.find(filter) .sort(Sorts.descending("qty")) .skip(9) .forEach(doc -> System.out.println(doc.toJson()));