定義
構文
$mod式を指定するには、次の構文を使用します。
{ field: { $mod: [ divisor, remainder ] } }
動作
$mod演算子は、 [ divisor, remainder ]配列に含まれる要素の数が 2 つより少ないか多い場合にエラーを返します。 例については、それぞれ 要素不足エラーと要素が多すぎるエラーを 参照してください。
また、MongoDB 5.1 (および5.0.4 )以降では、 または$mod の値が次のように評価された場合、divisorremainder はエラーを返します。
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 } ]