$cmp (比較)
最終更新:2026-10-09
$cmp (比較)
$cmp は 2 つの値を比較し、未満・等しい・より大きいに対して -1、0、1 を返します。式形式の比較演算子で、$cond 内でのカスタムソートキーやサイズチェックによく使われます。比較は BSON の型順序に従うため、異なる型の比較でもエラーにはならず、値は型で順序付けられます。ブール値を返す $eq や $gt とは違い、$cmp は 3 値の結果を返すため、ソートロジックや分岐にそのまま使えます。
| カテゴリ | 集合・条件・変換 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $cmp: [ <expression1>, <expression2> ] }
⚙️ パラメータ
| 式1 | 比較する最初の式。 |
|---|---|
| 式2 | 比較する2番目の式。 |
戻り値:1つ目が小さい場合は -1、等しい場合は 0、大きい場合は 1
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $cmp: 2 つのスコアを比較
db.scores.aggregate([
{ $project: {
result: { $cmp: ['$scoreA', '$scoreB'] }
} }
])
出力:
{ '_id': 1, 'result': 1 }
{ '_id': 2, 'result': -1 }
📌 注意事項
- 返すのは -1、0、1 の 3 値で、ブール値ではない
- 異なる型はエラーなく BSON の型順序で比較される
- 型順序では null は数値より前に並ぶ
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q$cmp は何を返しますか?
A最初が未満なら -1、等しければ 0、より大きければ 1 です。
Q$eq との違いは?
A$eq はブール値を返します。$cmp はソートや分岐に適した 3 値の結果を返します。
Q異なる型の比較でエラーになりますか?
Aいいえ — BSON の型順序に従うため、文字列は数値の後に並びます。