Docs Menu
Docs Home
/
MongoDB Atlas
/ /

$convert

項目一覧

  • 定義
  • 構文
  • 動作

$convert式はバイナリ データ型を変換します。これは、 Kafkaヘッダーのバイナリ データを変換するために使用できます。

$convert

$convert式には次のプロトタイプ形式があります。

{
input: "$binDataField",
to: <int, long, double>,
byteOrder: "little"|"big"
}
{
input: "$intLongOrDoubleField",
to: "binData",
byteOrder: "little"|"big"
}
{
input: "$binDataField",
to: "string",
format: <base64, base64url, hex, uuid, utf8>
}
{
input: "$stringField",
to: "binData",
format: <base64, base64url, hex, uuid, utf8>
}

$convert集計演算子は、 $convert式の Atlas Stream Processing バージョンで提供されるバイナリ データ型を除く、データ型間で変換を行います。

$convert式は、次のフィールドを含むドキュメントを受け取ります。

フィールド
必要性
説明
input
binDataintlongdoublestring
必須
変換されるバイナリ データintlongdouble 、またはstring型、またはintlongdouble 、またはstring型のデータに変換されるバイナリ データを使用します。
to
binDataintlongdoublestring
必須
inputが変換されるデータ型を指定します。 intlongdoublestring 、またはbinDataに指定できます。
byteOrder
小さいもの、大きいもの
必須

binDataの入力と出力のビッグ エンディアン バイトまたはリトル エンディアン バイト順序を指定します。指定しない場合、デフォルトはリトルエンディアン バイト順になります。

注意

byteOrder オプションは入力または出力binDataを解釈する方法を指定しますが、数値型の内部バイト順は制御しません。 MongoDBでは、 Kafkaのエコシステム、 Java、およびPython言語における数値からバイトへの変換のデフォルトの順序であるビッグ エンディアン順序を使用することを推奨しています。

format
base64, base64url, hex, uuid, utf8
必須

stringの入力と出力の最上位の形式引数を指定します。

注意

$toStringヘルパーメソッドは、デフォルトでは 、 binDataを utf- 8データとして解釈しません。デフォルトはbase64です。 UTF- 8変換には $convert式を使用する必要があります。

$convert.toの値がintの場合、 binData inputの値は12 、または4である必要があります。 $convert.toの値がlongの場合、 binData inputの値は124 、または8である必要があります。 inputが予期しない長さである場合、エラーが発生します。この動作は$convert.onErrorを構成することで制御できます。

binDataに変換すると、 intは4バイトのbinDataになり、 longは8バイトのbinDataになり、 doubleは8バイトのbinData . binDataからdoubleに変換する場合、 8バイトの入力は IEEE 754倍精度浮動点として解釈され、 4バイトの入力は IEEE 754単精度浮動小数点として解釈されます点。 MQLは倍精度浮動点のみをサポートするため、単精度浮動点値から倍精度への損失のない変換を実行します。

binDataを数値型に変換する:

$convert.to
int
long
double
許容される幅(バイト単位)
1, 2, 4
1, 2, 4, 8
4, 8
binData は次のように解釈されます:
2 の補完符号付き整数
2 の補完符号付き整数
IEEE 754の単精度または倍精度浮動点

数値型をbinDataに変換する:

入力
int
long
double
出力幅(バイト単位)
4
8
8

次の例では、次のようなバイナリ表記を使用してbinDataを記述します。

BinData(0b00000000 00000010)

左端のバイト( 00000000 )は、最小のメモリアドレス、またはバイト配列の0番目のインデックスに対応します。同様に、次のような 16 進表記 も使用します。

BinData(0x0100 000A)

左端のバイト( 01 )は、最小のメモリアドレス、またはバイト配列の0番目のインデックスに対応します。

次のドキュメントは、 BinDataintlongdouble表記にわたって値を変換する$convert式の例です。

{
$convert: {
input: BinData(0b00000000 00000010),
to: “int”,
byteOrder: “big” }
}

結果: 2

{
$convert: {
input: BinData(0b00000001 00000000),
to: “int”,
byteOrder: “big” }
}

結果: 256

{
$convert: {
input: BinData(0b00000001 00000000),
to: “int”,
byteOrder: “little” }
}

結果: 1

{
$convert: {
input: BinData(0x0001 0000),
to: “int”,
byteOrder: “big” }
}

結果: 65536

{
$convert: {
input: BinData(0x0001 0000 0000 0000),
to: “long”,
byteOrder: “big” }
}

結果: 281474976710656

{
$convert: {
input: BinData(0xFFFE7960),
to: “int”,
byteOrder: “big” }
}

結果: - 100000

{
$convert: {
input: BinData(0x0001 0000 0000 0000),
to: “int”,
byteOrder: “big” }
}

結果: Error- binData 長さは、 == int の場合、 1 、 2 、または4バイトのみになります。

{
$convert: {
input: BinData(0xC04C CCCD),
to: “double”,
byteOrder: “big” }
}

結果: - 3.2000000476837158203125

{
$convert: {
input: BinData(0x0000),
to: “double”,
byteOrder: “big” }
}

結果: Error- binData 長さは、4 8== double の場合、 バイトまたは バイトのみになります。

{
$convert: {
input: true,
to: “binData” }
}

結果: BinData( 0 x 01 ) // サブタイプ0

{
$convert: {
input: false,
to: “binData” }
}

結果: BinData( 0 x 00 ) // サブタイプ0

{
$convert: {
input: NumberLong(42),
to: “binData”,
byteOrder: “big” }
}

結果: BinData( 0 x 0000 0000 0000 002 A) // サブタイプ0

{
$convert: {
input: NumberLong(42),
to: “binData”,
byteOrder: “little” }
}

結果: BinData( 0 x 2 A 00 0000 0000 0000 ) // サブタイプ0

{
$convert: {
input: { $toInt: “$myNumericField” },
to: “binData”,
byteOrder: “little” }
}

myNumericField が Int( 42 )、Long( 42 )、または Double( 42.0 )であると仮定します。

結果: BinData( 0 x 2 A 00 0000 )

{
$convert: {
input: “$myIntOrLongField”,
to: “binData”,
byteOrder: “little” }
}

入力が Int( 42 )の場合:

結果: BinData( 0 x 2 A 00 0000 )

入力が Long( 42 )の場合:

BinData( 0 x 2 A 00 0000 0000 0000 )

戻る

集計式