我的文档结构集合如下:
{
"_id" : "Host CPU Utilization (%)",
"count" : 1,
"avg" : NumberDecimal("20.2397439956"),
"flaga" : 4
},
{
"_id" : "Active Sessions Using CPU",
"count" : 1,
"avg" : NumberDecimal("4.0580000000"),
"flaga" : 4
},
{
"_id" : "Wait Time (%)",
"count" : 1,
"avg" : NumberDecimal("1795.2150000000"),
"flaga" : 999
}
是否可以使用pymongo更改数据,如:
{
"_id" : 4,
"Host CPU Utilization (%)" : NumberDecimal("20.2397439956"),
"Active Sessions Using CPU" : NumberDecimal("4.0580000000")
},
{
"_id" : 999,
"Wait Time (%)" : NumberDecimal("1795.2150000000"),
}
我曾尝试使用更新推荐rename
,但无法动态执行,也无法将两个文档合并为一个。如果我使用聚合框架,我不知道如何使用变量字段名称$put
文档。
答案 0 :(得分:0)
从版本3.4开始,我们有http://wiki.netbeans.org/FaqFontSize运算符,这可能会有所帮助。您可以尝试按 flaga 字段进行分组,然后使用提到的运算符。
db.myCollection.aggregate([
{
$group: {
"_id": "$flaga",
"values": {
"$push": {
"k": "$_id",
"v": "$avg"
}
}
}
},
{
$project: {
"_id": 1,
"values": { $arrayToObject: "$values" }
}
}
])
这将为您提供如下结果:
{
"_id":4,
"values":{
"Host CPU Utilization (%)":NumberDecimal("20.2397439956"),
"Active Sessions Using CPU":NumberDecimal("4.0580000000")
}
}
您可以使用$arrayToObject添加下一个管道阶段以摆脱此嵌套,但不幸的是,您将丢失_id字段,我打赌它不是您正在寻找的,所以可能您应该执行此后处理在您的业务逻辑代码中。