AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

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")
  2. 次のコード例では、system.js に格納されている isEven 関数を test_numbers コレクションの $where 演算子で実行します。

    db.test_numbers.find({
    $where: function () {
    return isEven(this.value);
    }
    })