Docs 菜单

Docs 主页开发应用程序MongoDB Manual

$mod

在此页面上

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

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

要指定$mod表达式,请使用以下语法:

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

如果[ divisor, remainder ]数组包含的元素少于或多于两个,则$mod操作符会返回错误。有关示例,请分别参阅元素不足错误元素过多错误

此外,从 MongoDB 5开始。 1 (以及5 . 0 . 4 ),如果divisorremainder值的计算结果为$mod ,则返回错误:

  • NaN (不是数字)。

  • Infinity.

  • 不能使用 64 位整数表示的值。

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

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

有关示例,请参阅负股利。

创建一个 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-00JavaScript 中,当被除数为负且 等于 时, 具有 的余数。有关相等性的详细信息,请参阅 JavaScript 官方文档

结果:

[
{ _id: 1, item: 'abc123', qty: 0 },
{ _id: 3, item: 'ijk123', qty: 12 }
]
← $jsonSchema
$regex →