MongoDBでは、$objectToArray 集約パイプライン演算子は、ドキュメントを配列に変換します。
$objectToArrayによって生成された配列 元のドキュメントの各フィールド/値のペアの要素が含まれています。各要素は、kを含むドキュメントです。 フィールドとv フィールド:
-
kフィールドには、元のドキュメントのフィールド名が含まれています。 -
vfieldには、元のドキュメントのフィールドの値が含まれています。
例
dogsというコレクションがあるとします。 次のドキュメントで:
{
"_id" : 1,
"name" : "Fetch",
"specs" : {
"height" : 400,
"weight" : 55,
"color" : "brown"
}
}
$objectToArrayを使用できます specsを返す演算子 配列としてのフィールド:
db.dogs.aggregate(
[
{ $match: { _id: { $in: [ 1 ] } } },
{ $project: {
_id: 0,
result: { $objectToArray: "$specs" } }
}
]
).pretty() 結果:
{
"result" : [
{
"k" : "height",
"v" : 400
},
{
"k" : "weight",
"v" : 55
},
{
"k" : "color",
"v" : "brown"
}
]
} ネストされたドキュメント
$objectToArray 演算子はトップレベルのフィールドにのみ適用されます。埋め込まれたドキュメントには再帰的に適用されません。
次のようなドキュメントがあるとします。
{
"_id" : 2,
"name" : "Wag",
"specs" : {
"height" : 50,
"weight" : 5,
"color" : {
"eyes" : "brown",
"coat" : "black"
}
}
}
$objectToArrayを適用すると次のようになります そのドキュメントへ:
db.dogs.aggregate(
[
{ $match: { _id: { $in: [ 2 ] } } },
{ $project: {
_id: 0,
result: { $objectToArray: "$specs" } }
}
]
).pretty() 結果:
{
"result" : [
{
"k" : "height",
"v" : 50
},
{
"k" : "weight",
"v" : 5
},
{
"k" : "color",
"v" : {
"eyes" : "brown",
"coat" : "black"
}
}
]
}
この場合、最上位のドキュメントはkに変換されます / v フォーマットしますが、埋め込まれたドキュメントは元のドキュメントと同じままです。
間違ったタイプ
$objectToArrayに提供される引数 ドキュメントオブジェクトに解決される限り、任意の有効な式にすることができます。
引数がドキュメントオブジェクトに解決されない場合、エラーが発生します。
次のドキュメントがあるとします。
{ "_id" : 3, "name" : "Fetch", "specs" : "None" }
specs フィールドに文字列が含まれています。
$objectToArrayを適用すると次のようになります そのドキュメントへ:
db.dogs.aggregate(
[
{ $match: { _id: { $in: [ 3 ] } } },
{ $project: {
_id: 0,
result: { $objectToArray: "$specs" } }
}
]
) 結果:
uncaught exception: Error: command failed: {
"ok" : 0,
"errmsg" : "$objectToArray requires a document input, found: string",
"code" : 40390,
"codeName" : "Location40390"
} : aggregate failed :
example@sqldat.com/mongo/shell/utils.js:25:13
example@sqldat.com/mongo/shell/assert.js:18:14
example@sqldat.com/mongo/shell/assert.js:639:17
example@sqldat.com/mongo/shell/assert.js:729:16
example@sqldat.com/mongo/shell/db.js:266:5
example@sqldat.com/mongo/shell/collection.js:1058:12
@(shell):1:1
エラーが示すように、$objectToArray requires a document input 。
ヌル値
nullを提供する 結果はnull 。
次のドキュメントがあるとします。
{ "_id" : 4, "name" : "Fetch", "specs" : null }
そして、$objectToArrayを適用します :
db.dogs.aggregate(
[
{ $match: { _id: { $in: [ 4 ] } } },
{ $project: {
_id: 0,
result: { $objectToArray: "$specs" } }
}
]
) 結果:
{ "result" : null } 欠落しているフィールド
フィールドが欠落している場合、結果はnullになります 。
次のドキュメントがあるとします。
{ "_id" : 5, "name" : "Fetch" }
そして、$objectToArrayを適用します :
db.dogs.aggregate(
[
{ $match: { _id: { $in: [ 5 ] } } },
{ $project: {
_id: 0,
result: { $objectToArray: "$specs" } }
}
]
) 結果:
{ "result" : null }