MongoDBカーソルとページング
2214 ワード
説明:この記事では主にMongoDBにおけるカーソル(cursor)の使用とskip()とlimit()関数を用いたページングについて説明し、最後にsort()関数のソートについて説明します.
MongoDBカーソル(cursor)
カーソルとは、ResultSet(javaのデータオブジェクト)のデータ処理に非常に類似したデータが1行で操作できることを意味します.MongoDBではカーソルの処理も簡単で、find()関数を使用するだけでカーソルを返すことができます.
カーソルの宣言
例:ループを使用した操作
例:javaScriptのforEach反復データの使用
カーソルのライフサイクル
カーソルは一定のメモリとリソースを消費します.次に、カーソルが使用するリソースを解放します.カーソルループ完了後 クライアントは、終了メッセージ を送信する.カーソルが10分以上使用されていない
MongoDBページング
MongoDBページングで使用する2つの関数limit()とskip()は、ソートが必要な場合はsort()関数を使用できます.
Limit()とskip()の使用
例:前の50のデータのみをクエリー
例:前の50のデータをスキップ
sort()関数の使用
ソートするにはsortを使用します.対応するkey値は1リットル、-1は降順です.
例:価格priceで上位から下位にソートします.
例:priceとnameの両方のフィールドを使用して昇順ソート
ページング実装
1つ目の方法:データ量が少ない場合に使用できます.
第2の方式:skip()関数は比較的資源を消費するため、以下の方式はskip()操作を避ける.
このような操作では、現在記録されている値を記録し、その値より大きいデータを取得するたびにskip()関数を使用することを避け、効率が高くなります.
MongoDBカーソル(cursor)
カーソルとは、ResultSet(javaのデータオブジェクト)のデータ処理に非常に類似したデータが1行で操作できることを意味します.MongoDBではカーソルの処理も簡単で、find()関数を使用するだけでカーソルを返すことができます.
カーソルの宣言
//
var cursor = db.collection.find({});
//
cursor.hasNext();
//
cursor.next()
例:ループを使用した操作
var obj;
var cursor = db.collection.find();
while( cursor.hasNext() ){
obj = cursor.next();
// todo
...
}
例:javaScriptのforEach反復データの使用
var obj;
var cursor = db.collection.find();
cursor.forEach(function(item){
// todo
...
})
カーソルのライフサイクル
カーソルは一定のメモリとリソースを消費します.次に、カーソルが使用するリソースを解放します.
MongoDBページング
MongoDBページングで使用する2つの関数limit()とskip()は、ソートが必要な場合はsort()関数を使用できます.
limit: ,
skip: , ,
sort: , !
Limit()とskip()の使用
例:前の50のデータのみをクエリー
db.collection.find().limit(50);
例:前の50のデータをスキップ
db.collection.find().skip(50);
sort()関数の使用
ソートするにはsortを使用します.対応するkey値は1リットル、-1は降順です.
例:価格priceで上位から下位にソートします.
db.collection.find().sort({price: 1});
例:priceとnameの両方のフィールドを使用して昇順ソート
db.collection.find().sort({price: 1, name: 1});
ページング実装
1つ目の方法:データ量が少ない場合に使用できます.
//
db.test.find().sort({"price":1}).limit(20);
//
db.test.find().sort({"price":1}).limit(20).skip(20);
//
db.test.find().sort({"price":1}).limit(20).skip(40);
...
第2の方式:skip()関数は比較的資源を消費するため、以下の方式はskip()操作を避ける.
//
var page1 = db.test.find().sort({"price":1}).limit(20);
var latest ;
//
while( page1.hasNext() ){
latest = page1.next();
}
//
db.test.find({"price": {"$gt": latest.price} }).sort({"price":1}).limit(20);
このような操作では、現在記録されている値を記録し、その値より大きいデータを取得するたびにskip()関数を使用することを避け、効率が高くなります.