【问题标题】:Extract key-values from a dictionary and dump them into parent dictionary with "aggregate" method of "Pymongo" and '$project' command of "MongoDB"使用“Pymongo”的“聚合”方法和“MongoDB”的“$project”命令从字典中提取键值并将它们转储到父字典中
【发布时间】:2021-12-24 18:26:28
【问题描述】:

问题:

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

{ 
   { "_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
}, ...]

版本、库、功能和方法:

  • Python 3.9

  • 从 pymongo 导入 MongoClient

  • 导入 json

【问题讨论】:

    标签: python mongodb list dictionary pymongo


    【解决方案1】:

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

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

    Mongo Playground Sample Execution

    【讨论】:

    • 非常感谢您的帮助,我终于得到了我想要的格式=)。我不知道“$replaceRoot”或“$mergeObjects”,尽管最后一个类似于 Pandas 的“merge”。
    • @AngelRivasHidalgo 很高兴它有帮助。不要忘记为答案投票以帮助他人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    相关资源
    最近更新 更多