如何打开 mongodb 具有未知字段名称的嵌套文档

How to unwrap a mongodb nested document with unknown field names

我有一些来自 IoT 设备的数据,我使用以下结构将其存储在 mongodb 中:

{
data:{
<timeStamp1>:<energyValue1>,
<timeStamp2>:<energyValue2>,
<timeStamp3>:<energyValue3>,...
}
}

例如:

{
"data":{
"1648310504":51,
"1648310404":25,
"1648310304":63

}

}

有没有办法在聚合管道中将此文档解包为多个文档,以便该阶段的输出看起来像这样

文档 1。 { “时间戳”:1648310504, “数据”:51 }

文档 2。 { “时间戳”:1648310404, “数据”:25 }

文档 3。 { “时间戳”:1648310304, “数据”:63 }

也许是这样的:

db.collection.aggregate([
{
 "$addFields": {
    "data": {
      "$objectToArray": "$data"
    }
  }
},
{
  $unwind: "$data"
},
{
  $project: {
    timestamp: "$data.k",
    data: "$data.v",
    _id: 0
   }
  }
])

解释:

  1. 将对象数据转换为包含元素 key->k , value->v 的数组
  2. 展开数组数据,使其分解为单个文档。
  3. 按预期将数据 sub-fileds 投影到时间戳和数据。

playground