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

$bitsAnySet

項目一覧

  • 動作
$bitsAnySet

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

{ <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では、負の数-5にはビット位置200が設定されていると見なされますが、正の数+5にはビット位置200がクリアされていると見なされます。

対照的に、 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" }

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

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

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

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

次のクエリでは、 $bitsAnySet演算子を使用して、フィールドaに位置45にビットが設定されているかどうかをテストします( BinData(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" }

戻る

$bitsAnyClear

項目一覧