Docs 主页 → 开发应用程序 → MongoDB Manual
$mod
定义
语法
要指定$mod
表达式,请使用以下语法:
{ field: { $mod: [ divisor, remainder ] } }
行为
如果[ divisor, remainder ]
数组包含的元素少于或多于两个,则$mod
操作符会返回错误。有关示例,请分别参阅元素不足错误和元素过多错误。
此外,从 MongoDB 5开始。 1 (以及5 . 0 . 4 ),如果divisor
或remainder
值的计算结果为$mod
,则返回错误:
NaN
(不是数字)。Infinity
.不能使用 64 位整数表示的值。
如果集合中的某个文档包含值为 NaN
(不是数字)或 Infinity
的字段,则 $mod
不会在输出中包含该文档。
负股利
当被除数为负数时,余数也为负数。有关此行为的更多详细信息,请参阅 官方 JavaScript 文档 。
有关示例,请参阅负股利。
举例
使用$mod
选择文档
创建一个 inventory
集合:
db.inventory.insertMany( [ { "_id" : 1, "item" : "abc123", "qty" : 0 }, { "_id" : 2, "item" : "xyz123", "qty" : 5 }, { "_id" : 3, "item" : "ijk123", "qty" : 12 } ] )
以下查询会在 inventory
集合中选择 qty
字段的值模数 4
等于 0
的文档:
db.inventory.find( { qty: { $mod: [ 4, 0 ] } } )
该查询返回以下文档:
[ { '_id' : 1, 'item' : 'abc123', 'qty' : 0 }, { '_id' : 3, 'item' : 'ijk123', 'qty' : 12 } ]
元素不足错误
当传递的数组元素少于两个时, $mod
操作符会出错。
具有单个元素的数组
以下操作错误地向$mod
操作符传递了一个包含单个元素的数组:
db.inventory.find( { qty: { $mod: [ 4 ] } } )
该语句会导致以下错误:
MongoServerError: malformed mod, not enough elements
空数组
以下操作错误地向$mod
操作符传递了一个空数组:
db.inventory.find( { qty: { $mod: [ ] } } )
该语句会导致以下错误:
MongoServerError: malformed mod, not enough elements
元素过多错误
传递包含两个以上元素的数组时, $mod
操作符会出错。
例如,以下操作尝试对包含四个元素的数组使用$mod
操作符:
db.inventory.find( { qty: { $mod: [ 4, 1, 2, 3 ] } } )
该语句会导致以下错误:
MongoServerError: malformed mod, too many elements
浮点参数
$mod
表达式将十进制输入值舍入为零。
以下示例演示了此行为:
例子
输入查询:
db.inventory.find( { qty: { $mod: [ 4.0, 0 ] } } )
结果:
[ { _id: 1, item: 'abc123', qty: 0 }, { _id: 3, item: 'ijk123', qty: 12 } ]
例子
输入查询:
db.inventory.find( { qty: { $mod: [ 4.5, 0 ] } } )
结果:
[ { _id: 1, item: 'abc123', qty: 0 }, { _id: 3, item: 'ijk123', qty: 12 } ]
例子
输入查询:
db.inventory.find( { qty: { $mod: [ 4.99, 0 ] } } )
结果:
[ { _id: 1, item: 'abc123', qty: 0 }, { _id: 3, item: 'ijk123', qty: 12 } ]
每个查询都将 4
应用于 $mod
表达式,而不考虑小数点,从而得到相同的结果集。
负股利
当被除数为负数时, $mod
表达式会产生负结果。
以下示例演示了此行为:
例子
输入查询:
db.inventory.find( { qty: { $mod: [ -4, -0 ] } } )
此查询会返回两个文档,因为在qty
-0
-0
0
JavaScript 中,当被除数为负且 等于 时, 具有 的余数。有关相等性的详细信息,请参阅 JavaScript 官方文档 。
结果:
[ { _id: 1, item: 'abc123', qty: 0 }, { _id: 3, item: 'ijk123', qty: 12 } ]