使用 "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
}, ...]
版本、库、函数和方法:
Python 3.9
从 pymongo 导入 MongoClient
进口[=52=]
你走在正确的轨道上。您只需将 $project
替换为包含 $mergeObjects
运算符的 $replaceRoot
。
cursor_processes = collection.aggregate([
{
"$unwind": "$processes"
},
{
"$replaceRoot": {
"newRoot": {
"$mergeObjects": [
{
"_id": "$_id"
},
"$processes"
]
}
}
}
])
问题:
我有一个文件格式如下的集合:
{
{ "_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
进口[=52=]
你走在正确的轨道上。您只需将 $project
替换为包含 $mergeObjects
运算符的 $replaceRoot
。
cursor_processes = collection.aggregate([
{
"$unwind": "$processes"
},
{
"$replaceRoot": {
"newRoot": {
"$mergeObjects": [
{
"_id": "$_id"
},
"$processes"
]
}
}
}
])