$mod(取模)
最后更新:2026-10-09
$mod(取模)
$mod在聚合表达式中求余数,接受两个参数:被除数与除数,返回整除后的余数。常用于分页、周期判断、奇偶判定等场景,例如用订单号对2取模判断奇偶,或用时间戳取模做数据分片。注意除数为0时返回null而不是报错;余数的符号与被除数保持一致。$mod支持整数与Decimal,浮点数的取模行为需谨慎使用,必要时先转Decimal。
| 分类 | 数学 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $mod: [ <表达式1>, <表达式2> ] }
⚙️ 参数
| 被除数 | 数值或解析为数值的表达式。 |
|---|---|
| 除数 | 作为分母的数值表达式;为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对3取模得到-1
- 浮点取模可能产生精度问题,建议先转Decimal
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q$mod除以0会怎样?
A返回null,不会报错;需要默认值用$ifNull。
Q$mod结果的正负号怎么定?
A余数符号跟随被除数,如-7对3取模得-1。
Q浮点数能用$mod吗?
A支持Decimal,但普通浮点取模有精度问题,建议转Decimal后再取模。