Docs Menu
Docs Home
/
MongoDB マニュアル
/ / / /

$mod

項目一覧

  • 定義
  • 構文
  • 動作
$mod

フィールドの値を除数で割った値が指定された余りを持つドキュメントを選択します。 つまり、 $modは剰余演算を実行してドキュメントを選択します。 1 番目の引数は被除数、2 番目の引数は余りです。

$mod式を指定するには、次の構文を使用します。

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

$mod 演算子は、[ divisor, remainder ] 配列に含まれる要素の数が 2 つより少ないか多い場合にエラーを返します。例については、それぞれ要素不足エラー要素が多すぎるエラーを参照してください。

また、MongoDB 5.1 (および5.0.4 )以降では、 または$mod の値が次のように評価された場合、divisorremainder はエラーを返します。

  • 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演算子は、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 では-00に等しいため、2 つのドキュメントを返します。 この等価性の詳細については、 公式の JavaScript ドキュメント を参照してください 。

結果:

[
{ _id: 1, item: 'abc123', qty: 0 },
{ _id: 3, item: 'ijk123', qty: 12 }
]

戻る

$jsonSchema