JavaScript 関数をサーバーに保存する
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 }