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

$objectToArray(式演算子)

$objectToArray

ドキュメントを配列に変換します。返される配列には、元のドキュメントの各フィールドと値のペアの要素が含まれます。返される配列の各要素は、2 つのフィールド k と v を含むドキュメントです。

  • k フィールドには、元のドキュメント内のフィールド名が含まれます。

  • v フィールドには、元のドキュメント内のフィールドの値が含まれます。

$objectToArray の構文は次のとおりです。

{ $objectToArray: <object> }

<object>式は、ドキュメントオブジェクトを決定する限り、任意の有効な式にすることができます。 $objectToArrayは、引数の最上位フィールドに適用されます。 引数が埋め込みドキュメントフィールドを含むドキュメントである場合、 $objectToArrayは埋め込みドキュメントフィールドに再帰的には適用されません。

式の詳細については、「式 」を参照してください。

式の詳細については、「式 」を参照してください。

例
結果
{ $objectToArray: { item: "foo", qty: 25 } }
[ { "k" : "item", "v" : "foo" }, { "k" : "qty", "v" : 25 }]
{ $objectToArray: { item: "foo", qty: 25, size: { len: 25, w: 10, uom: "cm" } } }
[ { "k" : "item", "v" : "foo" }, { "k" : "qty", "v" : 25 }, { "k" : "size", "v" : { "len" : 25, "w" : 10, "uom" : "cm" } }]

以下のドキュメントを持つinventoryコレクションを考えてみましょう。

db.inventory.insertMany( [ { _id: 1, item: "ABC1", dimensions: { l: 25, w: 10, uom: "cm" } }, { _id: 2, item: "ABC2", dimensions: { l: 50, w: 25, uom: "cm" } }, { _id: 3, item: "XYZ1", dimensions: { l: 70, w: 75, uom: "cm" } }] )

次の集計パイプライン操作では、$objectToArray を使用して dimensions フィールドをドキュメントとして返します。

db.inventory.aggregate( [ { $project: { item: 1, dimensions: { $objectToArray: "$dimensions" } } } ])

この操作では、以下を返します。

{ _id: 1, item: "ABC1", dimensions: [ { "k" : "l", "v" : 25 }, { "k" : "w", "v" : 10 }, { "k" : "uom", "v" : "cm" } ] }{ _id: 2, item: "ABC2", dimensions: [ { "k" : "l", "v" : 50 }, { "k" : "w", "v" : 25 }, { "k" : "uom", "v" : "cm" } ] }{ _id: 3, item: "XYZ1", dimensions: [ { "k" : "l", "v" : 70 }, { "k" : "w", "v" : 75 }, { "k" : "uom", "v" : "cm" } ] }

以下のドキュメントを持つinventoryコレクションを考えてみましょう。

db.inventory.insertMany( [ { _id: 1, item: "ABC1", instock: { warehouse1: 2500, warehouse2: 500 } } { _id: 2, item: "ABC2", instock: { warehouse2: 500, warehouse3: 200} }] )

次の集計パイプライン操作では、 $objectToArrayと$unwindおよび$groupを使用して、倉庫ごとの在庫アイテムの合計を計算します。

db.inventory.aggregate([ { $project: { warehouses: { $objectToArray: "$instock" } } }, { $unwind: "$warehouses" }, { $group: { _id: "$warehouses.k", total: { $sum: "$warehouses.v" } } }])

この操作では、以下を返します。

{ _id: "warehouse3", total: 200 }{ _id: "warehouse2", total: 1000 }{ _id: "warehouse1", total: 2500 }

以下のドキュメントを持つinventoryコレクションを考えてみましょう。

db.inventory.insertMany( [ { _id: 1, item: "ABC1", instock: { warehouse1: 2500, warehouse2: 500 } }, { _id: 2, item: "ABC2", instock: { warehouse2: 500, warehouse3: 200}, }] )

次の集計パイプライン操作は、各アイテムの在庫合計を計算し、instock ドキュメントに追加します。

db.inventory.aggregate( [ { $addFields: { instock: { $objectToArray: "$instock" } } }, { $addFields: { instock: { $concatArrays: [ "$instock", [ { "k": "total", "v": { $sum: "$instock.v" } } ] ] } } } , { $addFields: { instock: { $arrayToObject: "$instock" } } }] )

この操作では、以下を返します。

{ _id: 1, item: "ABC1", instock: { warehouse1: 2500, warehouse2: 500, total: 3000 } }{ _id: 2, item: "ABC2", instock: { warehouse2: 500, warehouse3: 200, total: 700 } }
このページを評価

項目一覧