スクリプトの考慮事項
次のコンテキストでは、データベースクエリの結果を渡すことができません。
クラスコンストラクタ関数
非同期ジェネレーター関数
配列上の
.sort()
へのコールバッククラス内の JavaScript セッター
データベース呼び出しの結果にアクセスするには、 非同期関数 を使用します 、 非同期ジェネレーター関数 、または.map()
。
コンストラクター
次のコンストラクターは動作しません。
// This code will fail class FindResults { constructor() { this.value = db.students.find(); } } // This code will fail function listEntries() { return db.students.find(); } class FindResults { constructor() { this.value = listEntries(); } }
代わりに、 async
関数を使用してください。
class FindResults { constructor() { this.value = ( async() => { return db.students.find(); } )(); } }
注意
非同期 JavaScript を操作する代わりに、クラス内でデータベース操作を実行するメソッドを作成することもできます。
class FindResults { constructor() { } init() { this.value = db.students.find(); } }
このクラスを使用するには、まずクラス インスタンスを作成し、次に.init()
メソッドを呼び出します。
ジェネレーター関数
次のジェネレーター関数は動作しません。
// This code will fail function* FindResults() { yield db.students.findOne(); } // This code will fail function listEntries() { return db.students.findOne(); } function* findResults() { yield listEntries(); }
代わりにasync generator function
を使用してください。
function listEntries() { return db.students.findOne(); } async function* findResults() { yield listEntries(); }
配列ソート
次の配列ソートは機能しません。
// This code will fail db.getCollectionNames().sort( ( collectionOne, collectionTwo ) => { return db[ collectionOne ].estimatedDocumentCount() - db[ collectionOne ].estimatedDocumentCount() ) } );
代わりに.map()
を使用してください。
db.getCollectionNames().map( collectionName => { return { collectionName, size: db[ collectionName ].estimatedDocumentCount() }; } ).sort( ( collectionOne, collectionTwo ) => { return collectionOne.size - collectionTwo.size; } ).map( collection => collection.collectionName);
この配列ソートのアプローチは、サポートされていない同等のコードよりもパフォーマンスが高いことが多い。
JavaScript セッター
次の JavaScript 設定は機能しません。
// This code will fail class TestClass { value = 1; get property() { return this.value; } // does not work: set property(value) { this.value = db.test.findOne({ value }); } }