$bitXor (ビット排他的論理和)
最終更新:2026-10-09
$bitXor (ビット排他的論理和)
$bitXor は整数に対してビット単位の XOR 演算を行います。MongoDB 6.3 以降で利用でき、整数の配列(または単一の数値)を受け付けます。XOR はビットが異なると 1、一致すると 0 を返すため、チェックサム、ビットの反転、軽量な難読化(値をキーで XOR するなど)に便利です。引数のいずれかが null または欠落している場合は null を返します。オペランドは int32 または int64 である必要があります。同じ値で 2 回 XOR すると元の値に戻るという可逆性の特徴があります。
| カテゴリ | 数学 |
|---|---|
| MongoDB バージョン | 6.3+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $bitXor: [ <integer1>, <integer2>, ... ] }
⚙️ パラメータ
| 整数 | int32 または int64 の整数、あるいはそれらに解決される式。少なくとも2つ。 |
|---|
戻り値:すべてのオペランドのビット単位 XOR。null または欠落している場合は null
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $bitXor: 255 で下位 8 ビットを反転
db.users.aggregate([
{ $project: {
masked: { $bitXor: ['$score', 255] }
} }
])
出力:
{ '_id': 1, 'masked': 200 }
{ '_id': 2, 'masked': 155 }
📌 注意事項
- 一致するビットは 0、異なるビットは 1 になる
- 同じ値で 2 回 XOR すると元に戻る。可逆的な操作ができる
- 対応するのは int32 と int64 のみ
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q$bitXor の規則は?
A同じビットは 0、異なるビットは 1 になります。例: 5 XOR 3 は 6 です。
Q$bitXor は何に使えますか?
Aビットの反転、簡易チェックサム、軽量な難読化などです。
Qなぜ 2 回 XOR すると元の値に戻るのですか?
AXOR は自己逆演算だからです。x XOR k XOR k は常に x と等しくなります。