Docs Menu
Docs Home
/
MongoDBマニュアル

JavaScript 関数をサーバーに保存する

項目一覧

  • 始める前に
  • このタスクについて
  • 手順

system.js という特別なシステム コレクションがあり、再利用するために JavaScript 関数をストアできます。

このタスクは、レガシーmongo shell を使用して、system.jsコレクションからサーバーサイド関数をロードします。このバージョンの shell はサポート対象外になりました。MongoDB Shell の代替ソリューションについては、 スクリプトの作成を参照してください。

system.jsを使用する場合は、以下の推奨事項を考慮してください。

  • アプリケーション ロジックをデータベースに保存しないでください。

  • MongoDB 内で JavaScript を実行する場合、パフォーマンス上の制限があります。

  • アプリケーションとバージョン管理を共有する場合、最も効果的なのはアプリケーション コードです。

関数を保存するには、次の例のように、関数をsystem.jsコレクションに挿入します。

1
db.test_numbers.insertMany([
{ value: 1 },
{ value: 2 },
{ value: 3 },
{ value: 4 },
{ value: 5 },
{ value: 6 }
])
2

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では使用できません。

3
db.loadServerScripts()
4
  1. 次のコード例では、system.jsに格納されているecho関数を実行します。

    echo("test")
    test
  2. 次のコード例では、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 }

次へ

MongoDB とは?