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

必須

intlongdoublestring 型に変換されるバイナリ データ、またはバイナリ データに変換される intlongdoublestring 型のデータ。

to

binDataintlongdoublestring

必須

input が変換されるデータ型を指定します。intlongdoublestring、またはbinData を指定できます。

byteOrder

little, big

必須

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 を次のような 2 進表記法で説明します。

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” }
}

結果: エラー – binData の長さは、to == “double” の場合、4 または 8 バイトのみになります。

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

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

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

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

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

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

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

結果: BinData(0x2A00 0000 0000 0000) // サブタイプ 0

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

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

結果: BinData(0x2A00 0000)

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

入力が Int(42) の場合:

結果: BinData(0x2A00 0000)

入力が Long(42) の場合:

BinData(0x2A00 0000 0000 0000)

戻る

集計式