$mod(取模)
最后更新:2026-10-09
$mod(取模)
$mod 匹配字段值除以给定除数后余数等于指定值的文档。`{ qty: { $mod: [4, 0] } }` 匹配 qty 能被 4 整除的文档。常用于分桶、取整、周期性筛选(如逢 5 的倍数)。注意 MongoDB 5.1 起要求除数与余数均为整数,浮点数会报错。
| 分类 | 元素与求值 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ <字段>: { $mod: [ <除数>, <余数> ] } }
⚙️ 参数
| 字段 | 要匹配的数值字段名。 |
|---|---|
| 除数与余数数组 | 格式固定为 [除数, 余数],均为整数。 |
返回值:匹配的文档游标
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $mod:数量能被 4 整除的商品
db.products.find({ qty: { $mod: [4, 0] } })
// 余数为 1:如每 4 个一组的第一个
db.products.find({ qty: { $mod: [4, 1] } })
运行结果:
// 返回 qty 除以 4 余 0(整除)的商品;第二个示例返回余 1 的商品
📌 注意事项
- 数组格式固定:[除数, 余数],顺序别写反
- 5.1 起只接受整数,浮点数报错;负数行为依赖取模语义
- 无法走索引,数据量大时考虑聚合管道 $mod 表达式
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
Q$mod 数组里两个数是什么意思?
A[除数, 余数],匹配「字段值除以除数余数为余数」的文档。
Q$mod 支持浮点数吗?
AMongoDB 5.1 起不支持,除数和余数都必须是整数。
Q$mod 能走索引吗?
A不能,$mod 是计算型操作符,会全表扫描。