AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

$bitsAnySet(クエリ述語演算子)

$bitsAnySet

$bitsAnySetは、クエリによって指定されたビット位置のいずれかが設定されているドキュメント(つまり1 )をfield に一致させます。

{ <field>: { $bitsAnySet: <numeric bitmask> } }

{ <field>: { $bitsAnySet: < BinData bitmask> } }

{ <field>: { $bitsAnySet: [ <position1>, <position2>, ... ] } }

field値は数値またはBinData インスタンスのいずれかである必要があります。それ以外の場合、$bitsAnySet は現在のドキュメントと一致しません。

数値ビットマスク

オペランドフィールドと照合するための数値ビットマスクを指定できます。ビットマスクは、負でない64 ビットの符号付き整数である必要があります。それ以外の場合、$bitsAnySet はエラーを返します。

BinData Bitmask

任意の大きなBinDataインスタンスをビットマスクとして使用することもできます。

位置リスト

ビット位置のリストをクエリする場合、各<position>は負でない整数である必要があります。 ビット位置は最下位ビットの0から始まります。 たとえば、10 進数254は次のビット位置を持ちます。
ビット値
1
1
1
1
1
1
1
0

位置

7

6

5

4

3

2

1

0

システムのエンディアン性は、マシンのアーキテクチャによって異なります。 BSON データ内の数値は常にリトルエンディアンとして保存されます。システムがビッグエンディアンの場合、数値データはビッグエンディアンとリトルエンディアンの間で変換されます。

ビットテスト マッチ式演算子のコンテキストでは、次のようになります。

BinData値はビットマスクとして機能し、任意の長さの符号のないリトルエンディアン数であるかのように解釈されます。アドレス指定可能な最小バイトは、常に最下位バイトとして解釈されます。同様に、BinData 内の最上位バイトは、常に最上位バイトとして解釈されます。

クエリではクエリの$bitsAnySet 部分にインデックスを使用できませんが、クエリの他の部分ではインデックスを使用できます(該当する場合)。

$bitsAnySet は、符号付き 64 ビット整数として表できない数値と一致しません。 これは、値が符号付き 64 ビット整数に収まらないほど大きいか小さい場合、または端数コンポーネントがある場合に当てはまります。

数値は符号拡張されます。例、 では、負の数$bitsAnySet 200にはビット位置-5 が設定されていると見なされますが、正の数200 にはビット位置+5 がクリアされていると見なされます。

対照的に、 BinDataインスタンスはゼロ拡張です。 たとえば、次のドキュメントがあるとします。

db.collection.insertOne({ x: BinData(0, "ww=="), binaryValueofA: "11000011" })

$bitsAnySetxでは、 以外のすべてのビットがクリアされていると見なされます。

次の例では、次のドキュメントを含むコレクションを使用します。

db.collection.insertMany([
{ _id: 1, a: 54, binaryValueofA: "00110110" },
{ _id: 2, a: 20, binaryValueofA: "00010100" },
{ _id: 3, a: 20.0, binaryValueofA: "00010100" },
{ _id: 4, a: BinData(0, "Zg=="), binaryValueofA: "01100110" }
])

次のクエリでは、$bitsAnySet 演算子を使用して、フィールドa にビット位置1 またはビット位置5 のいずれかが設定されているかどうかをテストします。ここでの最下位ビットは位置0 です。

db.collection.find( { a: { $bitsAnySet: [ 1, 5 ] } } )

クエリは、次のドキュメントと一致します。

{ "_id" : 1, "a" : 54, "binaryValueofA" : "00110110" }
{ "_id" : 4, "a" : BinData(0,"Zg=="), "binaryValueofA" : "01100110" }

次のクエリは、 演算子を使用して、フィールド $bitsAnySetaの位置 、015 にビットが設定されているかどうかをテストします(ビットマスク35 のバイナリ表現は00100011 です)。

db.collection.find( { a: { $bitsAnySet: 35 } } )

クエリは、次のドキュメントと一致します。

{ "_id" : 1, "a" : 54, "binaryValueofA" : "00110110" }
{ "_id" : 4, "a" : BinData(0,"Zg=="), "binaryValueofA" : "01100110" }

次のクエリでは、$bitsAnySet 演算子を使用して、フィールドa に位置 と の位置にビットが設定されているかどうかをテストします(4 5BinData(0, "MA==")のバイナリ表現は00110000 です)。

db.collection.find( { a: { $bitsAnySet: BinData(0, "MA==") } } )

クエリは、次のドキュメントと一致します。

{ "_id" : 1, "a" : 54, "binaryValueofA" : "00110110" }
{ "_id" : 2, "a" : 20, "binaryValueofA" : "00010100" }
{ "_id" : 3, "a" : 20.0, "binaryValueofA" : "00010100" }
{ "_id" : 4, "a" : BinData(0,"Zg=="), "binaryValueofA" : "01100110" }
このページを評価

項目一覧