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

$convert 式(Stream Processing)

$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

binData、 int 、 long 、 double 、 string

必須

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

to

binData、 int 、 long 、 double 、 string

必須

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

byteOrder

little, big

任意

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

byteOrder オプションは、入力または出力 binData を解釈する方法を指定しますが、数値型の内部バイト順は制御しません。リトルエンディアンのバイト順に特定のユースケースがない限り、ビッグエンディアンのバイト順を使用します。

format

auto, base64, base64url, hex, uuid, utf8

条件付き

string の入力と出力の形式を指定します。input または to が string の場合に必要です。有効な値は次のとおりです。

  • auto : binDataからstringへの変換の場合、UUID サブタイプ binData の UUID 正準 string を返します。それ以外の場合は base64 を返します。

  • base64

  • base64url

  • hex

  • uuid

  • utf8

$toString ヘルパー メソッドは format: "auto" をデフォルトで使用します。UTF-8 変換には、format: "utf8" と一緒に $convert 式を使用します。

$convert.to の値が int の場合、 binData input 値は 1、2、または 4 である必要があります。$convert.to の値が long の場合、binData input 値は 1、2、4、または 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 番目のインデックスに対応します。

次のドキュメントは、BinData、int、long、double 表記にわたって値を変換する $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: 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)

このページを評価