On this page
$mod
在本页面
$mod
- 选择字段除以除数的值具有指定余数的文档(即执行取模运算以选择文档)。要指定$mod表达式,请使用以下语法:
{ field: { $mod: [ divisor, remainder ] } }
在 2.6 版中进行了更改:传递具有更少或更多元素的数组时,$mod运算符错误。在以前的版本中,如果传递的数组包含一个元素,则$mod运算符使用0
作为余数,如果传递的数组包含两个以上的元素,则$mod会忽略除前两个元素之外的所有元素。以前的版本在传递空数组时会返回错误。有关详细信息,请参见没有足够的元素错误和元素过多错误。
Examples
使用$ mod 选择文档
考虑包含以下文档的集合inventory
:
{ "_id" : 1, "item" : "abc123", "qty" : 0 }
{ "_id" : 2, "item" : "xyz123", "qty" : 5 }
{ "_id" : 3, "item" : "ijk123", "qty" : 12 }
然后,以下查询在inventory
集合中选择qty
字段以4
取模0
等于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 ] } } )
该语句导致以下错误:
error: {
"$err" : "bad query: BadValue malformed mod, not enough elements",
"code" : 16810
}
在 2.6 版中进行了更改:在以前的版本中,如果传递的数组包含一个元素,则$mod运算符将指定的元素用作除数,并将0
用作余数。
Empty Array
以下操作错误地向$mod运算符传递了一个空数组:
db.inventory.find( { qty: { $mod: [ ] } } )
该语句导致以下错误:
error: {
"$err" : "bad query: BadValue malformed mod, not enough elements",
"code" : 16810
}
在 2.6 版中进行了更改:早期版本返回以下错误:
error: { "$err" : "mod can't be 0", "code" : 10073 }
元素过多错误
传递具有两个以上元素的数组时,$mod运算符错误。
例如,以下操作尝试对包含四个元素的数组使用$mod运算符:
error: {
"$err" : "bad query: BadValue malformed mod, too many elements",
"code" : 16810
}
在 2.6 版中进行了更改:在以前的版本中,如果传递的数组包含两个以上元素,则$mod会忽略除前两个元素之外的所有元素。