system.js という特別なシステム コレクションがあり、再利用するために JavaScript 関数をストアできます。
始める前に
このタスクは、レガシーmongo shell を使用して、system.jsコレクションからサーバーサイド関数をロードします。このバージョンの shell はサポート対象外になりました。MongoDB Shell の代替ソリューションについては、 スクリプトの作成を参照してください。
このタスクについて
system.jsを使用する場合は、以下の推奨事項を考慮してください。
アプリケーション ロジックをデータベースに保存しないでください。
MongoDB 内で JavaScript を実行する場合、パフォーマンス上の制限があります。
アプリケーションとバージョン管理を共有する場合、最も効果的なのはアプリケーション コードです。
手順
関数を保存するには、次の例のように、関数をsystem.jsコレクションに挿入します。
JavaScript 関数をデータベースに格納する
JavaScript 関数をデータベースに保存するには、次のフィールドを含むドキュメントを挿入します。
_idフィールドには関数の名前が保持され、データベースごとに一意になります。valueフィールドには、関数定義が保持されます。
次の例では、system.jsコレクション内にecho関数を作成しています。
db.system.js.insertOne( { _id: "echo", value : function(x) { return x; } } )
次の例では、system.jsコレクション内にisEven関数を作成しています。
db.system.js.insertOne( { _id: "isEven", value: function (num) { return num % 2 === 0; } } )
BSON 型として保存されたこれらの関数は、mapReduce や $where などの任意の JavaScript コンテキストから使用できます。
注意
非推奨の BSON 型 JavaScript(スコープあり)として保存された関数は、mapReduceおよび$whereでは使用できません。
保存された JavaScript 関数を実行する
次のコード例では、
system.jsに格納されているecho関数を実行します。echo("test") test 次のコード例では、
system.jsに格納されているisEven関数をtest_numbersコレクションの$where演算子で実行します。db.test_numbers.find({ $where: function () { return isEven(this.value); } }) { "_id" : ObjectId("668d7be41b55bec1bf191499"), "value" : 2 } { "_id" : ObjectId("668d7be41b55bec1bf19149b"), "value" : 4 } { "_id" : ObjectId("668d7be41b55bec1bf19149d"), "value" : 6 }