$mod (剰余)
最終更新:2026-10-09
$mod (剰余)
$mod は 2 つの値を割った余りを返します。引数は被除数と除数の 2 つで、整数除算の余りを返します。ページング、周期性の検出、パリティ判定(注文 ID が奇数か偶数かを 2 で割って判定するなど)、タイムスタンプの剰余によるシャーディングなどに役立ちます。除数が 0 の場合はエラーにならず null を返します。結果の符号は被除数に従います。$mod は整数と Decimal で動作します。浮動小数点値には注意が必要で、必要に応じて Decimal に変換してください。
| カテゴリ | 数学 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $mod: [ <expression1>, <expression2> ] }
⚙️ パラメータ
| 被除数 | 数値、または数値に解決される式。 |
|---|---|
| 除数 | 分母の式。除数が 0 の場合、結果は null になります。 |
戻り値:除算後の剰余。除数が 0 の場合は null
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $mod: 注文番号が奇数か判定
db.orders.aggregate([
{ $project: {
isOdd: { $eq: [{ $mod: ['$orderNo', 2] }, 1] }
} }
])
出力:
{ '_id': 1, 'isOdd': true }
{ '_id': 2, 'isOdd': false }
📌 注意事項
- 除数が 0 なら例外なく null を返す
- 余りの符号は被除数に従う。-7 mod 3 は -1 になる
- 浮動小数点の剰余は精度を失うことがある。先に Decimal に変換する
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q$mod が 0 で割るとどうなりますか?
A例外なしで null を返します。デフォルトには $ifNull を使います。
Q$mod の結果の符号はどう決まりますか?
A余りは被除数に従うため、-7 mod 3 は -1 になります。
Q$mod は浮動小数点数で使えますか?
ADecimal は問題ありませんが、素の double は不正確になり得ます。剰余を取る前に Decimal に変換してください。