JavaScript 関数をサーバーに保存する
system.js
という特別なシステム コレクションがあり、再利用するために JavaScript 関数をストアできます。
始める前に
このタスクは、レガシー シェルを使用して、mongo
system.js
コレクションからサーバーサイド関数をロードします。このバージョンのシェルはサポート対象外になりました。 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 }