$mod
定義
構文
$mod
式を指定するには、次の構文を使用します。
{ field: { $mod: [ divisor, remainder ] } }
動作
$mod
演算子は、[ divisor, remainder ]
配列に含まれる要素の数が 2 つより少ないか多い場合にエラーを返します。例については、それぞれ要素不足エラーと要素が多すぎるエラーを参照してください。
また、MongoDB 5.0.4以降では、 または$mod
の値が次のように評価された場合、divisor
remainder
はエラーを返します。
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
演算子は、2 つ未満の要素を含む配列を渡されるとエラーにします。
単一要素の配列
次の操作では、 $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
演算子は、2 つ以上の要素を含む配列を渡されるとエラーにします。
たとえば、次の操作では、4 つの要素を含む配列で$mod
演算子を使用しようとしています。
db.inventory.find( { qty: { $mod: [ 4, 1, 2, 3 ] } } )
このステートメントは、次のエラーになります。
MongoServerError: malformed mod, too many elements
浮動小数点引数
$mod
式は 10 進数入力を 0 に丸めます。
次の例は、この動作を示しています。
例
入力クエリ:
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 } ]
各クエリでは、小数点に関係なく $mod
式に 4
が適用されるため、結果セットは同じになります。
マイナス配当
$mod
式は、配当がマイナスの場合、負の結果を生成します。
次の例は、この動作を示しています。
例
入力クエリ:
db.inventory.find( { qty: { $mod: [ -4, -0 ] } } )
このクエリでは、配当がマイナスの場合、 qty
は-0
の余りを持ち、JavaScript では-0
が0
に等しいため、2 つのドキュメントを返します。 この等価性の詳細については、 公式の JavaScript ドキュメント を参照してください 。
結果:
[ { _id: 1, item: 'abc123', qty: 0 }, { _id: 3, item: 'ijk123', qty: 12 } ]