Docs Menu
Docs Home
/
MongoDB Shell
/

スクリプトの考慮事項

項目一覧

  • コンストラクター
  • ジェネレーター関数
  • 配列ソート
  • JavaScript セッター

次のコンテキストでは、データベースクエリの結果を渡すことができません。

  • クラスコンストラクタ関数

  • 非同期ジェネレーター関数

  • 配列上の .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 設定は機能しません。

// 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 });
}
}

戻る

コードのスコープ