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

$bit

項目一覧

  • 定義
  • 動作
$bit

$bit演算子は、フィールドのビット単位の更新を実行します。 この演算子は、ビット単位のand 、ビット単位のor 、ビット単位のxor (つまり 排他的論理和)操作。 $bit演算子式を指定するには、次のプロトタイプを使用します。

{ $bit: { <field>: { <and|or|xor>: <int> } } }

この演算子は整数フィールド(32 ビット整数または 64 ビット整数)でのみ使用します。

埋め込みドキュメントまたは配列で<field>を指定するには、 ドット表記 を使用します。

注意

mongosh内のすべての数値は、整数ではなく double です。 整数を指定するには、 NumberInt()またはNumberLong()コンストラクターを使用します。 詳細については、 NumberIntまたはNumberLongを参照してください。

MongoDB 5.0 以降、$bitなどの更新演算子を空のオペランド式({ })と併用しても、mongod でエラーが発生しなくなりました。空の更新を使用すると変更は一切されず、oplog エントリも作成されません(操作は実行されません)。

MongoDB 5.0 以降、更新演算子では名前が文字列ベースのドキュメントフィールドを辞書順に処理します。数値名のフィールドは、数値順に処理されます。詳細については、「更新演算子の動作」を参照してください。

次の例では、 switchesコレクションを使用します。

db.switches.insertMany( [
{ _id: 1, expdata: Int32(13) },
{ _id: 2, expdata: Int32(3) },
{ _id: 3, expdata: Int32(1) }
] )

updateOne()操作でビット単位のandを使用してexpdataを更新します。

db.switches.updateOne(
{ _id: 1 },
{ $bit: { expdata: { and: Int32( 10 ) } } }
)

ビット単位のand演算。

  • は、次のビット単位の値を取得します: expdata

  • andを使用して Int32(10)のビット値を適用する

  • 結果 1000 でexpdataを更新

1101 // expdata
1010 // Int32(10)
----
1000

バイナリ 1000 は Int32(8) と同等です。 db.switches.find( { _id: 1 } )コマンドは次のドキュメントを返します。

{ "_id" : 1, "expdata" : 8 }

updateOne()操作でビット単位のorを使用してexpdataを更新します。

db.switches.updateOne(
{ _id: 2 },
{ $bit: { expdata: { or: Int32( 5 ) } } }
)

ビット単位のor演算。

  • は、次のビット単位の値を取得します: expdata

  • orを使用して Int32(5) のビット値を適用する

  • は 0111 という結果でexpdataを更新します

0111 // expdata
0101 // Int32(5)
----
0111

バイナリ 0111 は Int32(7) と同等です。 db.switches.find( { _id: 2 } )コマンドは次のドキュメントを返します。

{ "_id" : 2, "expdata" : 7 }

updateOne()操作でビット単位のxorを使用してexpdataを更新します。

db.switches.updateOne(
{ _id: 3 },
{ $bit: { expdata: { xor: Int32( 5 ) } } }
)

ビット単位のand演算。

  • は、次のビット単位の値を取得します: expdata

  • andを使用して Int32(5) のビット値を適用する

  • は 0100 という結果でexpdataを更新します

0001 // expdata
0101 // Int32(5)
----
0100

バイナリ 0100 はInt32(4)と同等です。 db.switches.find( { _id: 3 } )コマンドは次のドキュメントを返します。

{ "_id" : 1, "expdata" : 4 }

Tip

以下も参照してください。

戻る

Bitwise

項目一覧