I have multiple documents of below structure.
"GENUS_DATA": {
"File_6489248.ZLM": {
"MeterID_6489248": {}
}
}
"GENUS_DATA": {
"File_12345.ZLM": {
"MeterID_12345": {}
}
}
我想在 mongo-Db 中用名稱“File-Name”AS KEY 動態替換 File_6489248.ZLM 和 File_12345.ZLM,記住會有 n 條記錄,因此僅定義上述 2 個值將不起作用。
uj5u.com熱心網友回復:
一種選擇是$objectToArray與更新管道一起使用:
db.collection.update({},
[
{$set: {GENUS_DATA: {$objectToArray: "$GENUS_DATA"}}},
{$project: {GENUS_DATA: {"File-Name": {$first: "$GENUS_DATA.k"},
"data": {$first: "$GENUS_DATA.v"}}}
}
],
{multi: true})
看看它在操場上的例子是如何作業的
編輯:如果您認為這里的每個字典都可以有多個鍵并且您希望所有鍵都是通用的(因為它們應該),您可以使用$map每個鍵可以包含專案陣列:
db.collection.aggregate([
{$project: {GENUS_DATA: {$objectToArray: "$GENUS_DATA"}}},
{
$project: {
GENUS_DATA: {
$map: {
input: "$GENUS_DATA",
as: "item",
in: {"File-Name": "$$item.k", met: {$objectToArray: "$$item.v"}}
}
}
}
},
{
$project: {
GENUS_DATA: {
$map: {
input: "$GENUS_DATA",
as: "file",
in: {"File-Name": "$$file.File-Name",
met: {
$map: {
input: "$$file.met",
as: "met",
in: {"METNO": "$$met.k", data: "$$met.v"}
}
}
}
}
}
}
}
])
看看它在操場示例上的作業原理 - 通用多鍵
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/494149.html
