toArray()
の比較は次のとおりです。 find()
の後のカーソル Node.jsMongoDBドライバーで。一般的なコード:
var MongoClient = require('mongodb').MongoClient,
assert = require('assert');
MongoClient.connect('mongodb://localhost:27017/crunchbase', function (err, db) {
assert.equal(err, null);
console.log('Successfully connected to MongoDB.');
const query = { category_code: "biotech" };
// toArray() vs. cursor code goes here
});
これがtoArray()
です 上記のセクションにあるコード。
db.collection('companies').find(query).toArray(function (err, docs) {
assert.equal(err, null);
assert.notEqual(docs.length, 0);
docs.forEach(doc => {
console.log(`${doc.name} is a ${doc.category_code} company.`);
});
db.close();
});
ドキュメントによると、
発信者は、結果を保存するのに十分なメモリがあることを確認する責任があります。
cursor.forEach()
を使用したカーソルベースのアプローチは次のとおりです。 方法:
const cursor = db.collection('companies').find(query);
cursor.forEach(
function (doc) {
console.log(`${doc.name} is a ${doc.category_code} company.`);
},
function (err) {
assert.equal(err, null);
return db.close();
}
);
});
forEach()
を使用 このアプローチでは、メモリ内のすべてのデータをフェッチする代わりに、データをアプリケーションにストリーミングします。 find()
提供されるドキュメントの一部を使用しようとするまでデータベースに実際に要求を行わないため、カーソルはすぐに作成されます。 cursor
のポイント クエリを説明することです。 cursor.forEach
の2番目のパラメーター エラーが発生した場合の対処方法を示します。
上記のコードの初期バージョンでは、toArray()
でした。 これにより、データベースの呼び出しが強制されました。つまり、すべてが必要でした ドキュメントをarray
に配置する必要がありました 。
MongoDB
に注意してください データをバッチで返します。以下の画像は、カーソル(アプリケーションから)からMongoDB
へのリクエストを示しています :
forEach
toArray
よりも優れたスケーリング 入ってきたドキュメントを処理できるため 終わりに達するまで。 toArray
と比較してください -すべてを待つ場所 取得するドキュメントと全体 アレイが構築されます。これは、ドライバーとデータベースシステムが連携して結果をアプリケーションにバッチ処理しているという事実から、何の利点も得られていないことを意味します。バッチ処理は、メモリのオーバーヘッドと実行時間の観点から効率を提供することを目的としています。 可能であれば、アプリケーションでそれを利用してください。