MongoDB文档组合

时间:2017-12-07 05:19:36

标签: python mongodb pymongo

我的文档结构集合如下:

{
"_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文档。

1 个答案:

答案 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字段,我打赌它不是您正在寻找的,所以可能您应该执行此后处理在您的业务逻辑代码中。