$where (JavaScript 式)

最終更新:2026-10-09

$where (JavaScript 式)

$where は、JavaScript 式をクエリ条件として評価します。`{ $where: 'this.credits == this.debits' }` のように使います。サーバーサイドで実行され、遅く、インデックスも使えません。MongoDB は $expr を推奨しています。$expr で表現できないロジック(独自 JS 関数など)のときだけ使い、インジェクション対策も行いましょう。

カテゴリ要素と評価
MongoDB バージョン1.0+
例の言語mongosh(シェル)

📝 構文

{ $where: <JavaScript expression> }

⚙️ パラメータ

JS 式ブール値を返す JavaScript 式。this は現在のドキュメントを参照します。

戻り値:一致するドキュメントのカーソル

▶ 例

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

// $where: credits と debits が等しいレコード(JS)
db.accounts.find({ $where: 'this.credits == this.debits' })

// 推奨: $expr のほうが速い
db.accounts.find({ $expr: { $eq: ['$credits', '$debits'] } })

出力:

// どちらも同じ結果を返すが、$expr のほうがパフォーマンスが良い

📌 注意事項

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

📚 関連チュートリアル

❓ よくある質問

Q$where はなぜ遅いのですか?
Aドキュメントごとにサーバーサイドで JavaScript を評価し、インデックスのサポートもないからです。
Q$where と $expr の選び方は?
A$expr を優先してください。パフォーマンスとインデックスサポートが優れています。$where は独自 JS ロジックにのみ使います。
Q$where にセキュリティ上のリスクはありますか?
Aあります。ユーザー入力を文字列に連結するとインジェクションを招きます。パラメータ化するか、$expr に切り替えてください。
Web-Tutorial.com

Web-Tutorial 技術チーム

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

100%