重要
MongoDB 5.0 以降では map-Reduce は非推奨となります。
MongoDB は、 JavaScriptコードをサーバー側で実行する次の演算子を提供します。
$whereドキュメントをクエリするために JavaScript 式または関数を評価する 演算子 。$accumulatorと$functionの集計操作を使用し、ユーザーがカスタム集計式を定義できるようにします。
MongoDB Shell での .js ファイルの実行
JavaScript( .js )ファイルをmongoshに指定すると、サーバー上でファイルを実行できます。 これは、バッチ管理作業を実行するのに適した手法です。 サーバー上でローカルホスト インターフェース経由で接続するmongoshを実行すると、接続は高速で低レイテンシになります。
サーバーサイドJavaScriptを無効にする
またはmongodmongos のJavaScriptのサーバー側実行をすべて無効にするには、次のいずれかを実行します。
--noscriptingコマンドラインで オプションを渡します。詳しくは、mongod --noscriptingとmongos --noscriptingを参照してください。security.javascriptEnabled構成ファイルで を false に設定します。
動作
MongoDB の JavaScript
サーバー側のメソッドはJavaScriptを使用しますが、 MongoDBとのほとんどの対話ではJavaScriptは使用されず、代わりに対話アプリケーションの言語で慣用的なドライバーが使用されます。
同時実行性
同時実行情報については、個々のメソッドまたは演算子のドキュメントを参照してください。 同時実行テーブルも参照してください。
サポートされていない配列関数と文字列関数
MongoDB 6.0では、サーバーサイド JavaScript 、 $accumulator 、 $function 、 $where式に使用される内部 JavaScript エンジンが MozJS- 60から MozJS- 91にアップグレードされています。 MozJS- 60に存在した非推奨、非標準の配列関数と string 関数は、MozJS- 91で一部削除されました。
Unavailable on ppc64le
MongoDB9.0 以降、サーバーサイドJavaScript はppc64le アーキテクチャでは利用できません。 のmongod バイナリとmongos バイナリにはJavaScriptエンジンppc64le $whereは含まれていません。その結果、そのアーキテクチャでは、 、$accumulator 、$function 、およびmap-reduce操作は失敗します。構成ファイル設定または ppc64leコマンドライン オプションを使用して、 でサーバーサイドJavaScriptを有効にすることはできません。
これらの操作を実行するには、 JavaScriptエンジン を含むアーキテクチャで 配置を使用します。サーバー側JavaScriptを必要としない集計パイプラインステージと演算子を使用するように操作を書き換えることもできます。
日付操作は UTC を使用する
MongoDB9.0 以降、サーバーサイドJavaScript は、Date ホストmongod タイムゾーンに関係なく、ローカル 操作を UTC で評価します。Date.prototype.getHours() などのローカル コンストラクター、ローカル コンストラクター、日付を string に変換する操作はすべて UTC を使用します。保存されたBSON日付値は変更されません。Date.prototype.getTime() Date.prototype.toISOString()、 、getUTC*() メソッドも同様です。
$hourtimezone名前付きタイムゾーンで日付を評価するには、明示的な 引数を持つDate などの集計日付演算子を使用します。 JavaScriptでローカル メソッドを使用しないでください。アップグレードガイダンスについては、 「 MongoDB の互換性の変更9.0 」を参照してください。
SELinux に関する考慮事項
SELinux を使用している場合、 サーバー側のJavaScriptを必要とするMongoDB操作ではセグメント違反エラーが発生します。サーバーサイドJavaScriptの実行を無効にするには、「 サーバーサイドJavaScriptを無効にする 」を参照してください。