JavaScript (サーバーサイドコード)

最終更新:2026-10-09

JavaScript (サーバーサイドコード)

JavaScript 型はドキュメント内に JS コードを格納し、`$where` を通じてサーバー側で実行されます(ドキュメントごとに実行)。`$where` はインデックスを使えず遅く、小さなコレクションか、クエリ演算子では表現できないロジックにのみ適しています。MongoDB 8.0 以降、サーバーサイド JavaScript はデフォルトで無効で、明示的な起動フラグが必要です。新しいコードでは `$expr` または `$function` アグリゲーション演算子を推奨します。

カテゴリBSON 型
MongoDB バージョン1.0+
例の言語mongosh(シェル)

📝 構文

{ $where: "this.price * this.qty > 100" }
{ $expr: { $gt: [{ $multiply: ["$price", "$qty"] }, 100] } }

戻り値:$where は述語を満たすドキュメントを返します。保存される JS 値はコード文字列です

▶ 例

以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):

// JavaScript: サーバーサイドの $where
use shop
db.orders.find({ $where: 'this.price * this.qty > 1000' })

出力:

// price * qty > 1000 の注文(コレクションスキャン)

📌 注意事項

さらなる実践ケースを近日公開予定。

📚 関連チュートリアル

❓ よくある質問

Qなぜ $where は遅いのですか?
Aドキュメントごとに JS インタープリタを呼び出し、インデックスを使えず、全体スキャンを強制するためです。
Q$where は MongoDB 8.0 でも動きますか?
Aデフォルトで無効です。--enableJavaScriptExecution でサーバーを起動すると再び有効になります。
Q複雑な複数フィールド間の比較はどう表現しますか?
A$expr と $multiply などのアグリゲーション演算子を組み合わせます。最適化が効き、部分的にインデックスも利用できます。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%