使用 "Pymongo" 的 "aggregate" 方法和 "MongoDB" 的 '$project' 命令从字典中提取键值并将它们转储到父字典中

Extract key-values from a dictionary and dump them into parent dictionary with "aggregate" method of "Pymongo" and '$project' command of "MongoDB"

问题:

我有一个文件格式如下的集合:

{ 
   { "_id": 1234,
    "Processes": [
         "0": { "0_0": aaaa , "0_1": bbbb },
         "1": { "1_0": cccc, "1_1": dddd },
         "2": { "2_0": eeee, "2_1": ffff},
     ]},
   { "_id": 5678,
    "processes": [
         "0": { "0_0": gggg, "0_1": hhhh},
         "1": { "1_0": iiii, "1_1": jjjj},
         "2": { "2_0": kkkk, "2_1": mmmm},
     ]}
}

我开发了下面这句话来创建一个列表,其元素都是单独的进程:

cursor_processes = collection.aggregate([
        {
            '$unwind':"$processes"
        },
        {
            '$project': {
                "_id": 1,
                "processes": 1
            }
        }
])

results = [i for i in cursor_processes]

分析函数的输出,可以看到结果如下:

[{
   "_id": 1234,
   "processes": { "0_0": yyyy , "0_1": bbbb }
},
{
   "_id": 1234,
   "Processes": { "1_0": cccc, "1_1": dddd }
}, ...]

但我想要得到的是具有以下格式的列表:

[{
   "_id": 1234,
   "0_0": yyyy , 
   "0_1": bbbb
},
{
   "_id": 1234,
   "1_0": cccc , 
   "1_1": dddd
}, ...]

版本、库、函数和方法:

你走在正确的轨道上。您只需将 $project 替换为包含 $mergeObjects 运算符的 $replaceRoot

cursor_processes = collection.aggregate([
  {
    "$unwind": "$processes"
  },
  {
    "$replaceRoot": {
      "newRoot": {
        "$mergeObjects": [
          {
            "_id": "$_id"
          },
          "$processes"
        ]
      }
    }
  }
])

Mongo Playground Sample Execution