文档菜单
文档首页
/
MongoDB 手册
/ / / /

$mod

本页内容

  • 定义
  • 语法
  • 行为
  • 示例
$mod

选择一个字段的值除以除数后具有指定余数的文档。也就是说,$mod 执行取模运算以选择文档。第一个参数是分子,第二个参数是余数。

要指定一个 $mod 表达式,使用以下语法

{ field: { $mod: [ divisor, remainder ] } }

$mod 如果 [ divisor, remainder ] 数组不包含两个元素时,会返回一个错误。请参阅以下示例元素不足错误元素过多错误 分别。

此外,从 MongoDB 5.1(及 5.0.4)版本开始,如果 divisorremainder 的值评估为

  • NaN(不是一个数字)。

  • 无穷大.

  • 无法使用 64 位整数表示的值。

如果集合中的文档包含值为 NaN(不是一个数字)或 Infinity 的字段,$mod 将不会将该文档包含在输出中。

当除数是负数时,余数也是负数。关于此行为的更多详细信息,请参阅官方JavaScript文档

例如,请参阅负除数。

创建一个库存集合

db.inventory.insertMany( [
{ "_id" : 1, "item" : "abc123", "qty" : 0 },
{ "_id" : 2, "item" : "xyz123", "qty" : 5 },
{ "_id" : 3, "item" : "ijk123", "qty" : 12 }
] )

然后,以下查询选择在库存集合中,数量字段的值模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,而在 JavaScript 中 -0 等于 0。有关此等性的详细信息,请参阅 官方 JavaScript 文档

结果

[
{ _id: 1, item: 'abc123', qty: 0 },
{ _id: 3, item: 'ijk123', qty: 12 }
]

返回

$jsonSchema