$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会忽略除前两个元素之外的所有元素。

首页