Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用MongoDB聚合获得平坦JSON结果?_Mongodb_Mongoose_Aggregation - Fatal编程技术网

如何使用MongoDB聚合获得平坦JSON结果?

如何使用MongoDB聚合获得平坦JSON结果?,mongodb,mongoose,aggregation,Mongodb,Mongoose,Aggregation,聚合之后,我得到了一个不期望的输出。我能做点什么吗 aggregate([ { "$match": { "CREATE_DATE": { "$lte": new Date(), "$gte": new Date(new Date().setDate(new Date().getDate()-120))

聚合之后,我得到了一个不期望的输出。我能做点什么吗

aggregate([ 
            { "$match": {
                "CREATE_DATE": {
                    "$lte": new Date(),
                    "$gte": new Date(new Date().setDate(new 
                       Date().getDate()-120))
                }
            } },
            { "$group": {
                "_id": { 
                    "month": { "$month": "$CREATE_DATE" },
                    "year": { "$year": "$CREATE_DATE" }
                },
                "avgofozone": { "$avg": "$OZONE" }
            } }

        ])
实际输出:

预期输出:


使用MongoDB>=v3.4.4,您可以将以下阶段添加到现有管道的末尾,这将为您完成转换:

{
    $addFields: {
        result: {
            $let: {
                vars: { "months": [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ], arr: { $objectToArray: "$$ROOT" } },
                in: {
                    "k" : { $arrayElemAt: [ "$$months" , { $subtract: [ { $arrayElemAt: [ "$$arr.v" , 2 ] }, 1 ] } ] },
                    "v" : { $arrayElemAt: [ "$$arr.v" , 0 ] }
                }
            }
        }
    }
}, {
    $group: {
        _id: "$year",
        result: { $push: "$result" },
    }
}, {
    $addFields: {
        "result": { $arrayToObject: "$result" },
    }
}, {
    $addFields: {
        "result.zonetype": "avgofozone",
        "result.year": "$_id"
    }
}, {
    $replaceRoot: {
        newRoot: "$result"
    }
}

您可以发布一个输入文档示例吗?@Vega我们可以显示月份名称整数无问题“{”\u id:ObjectId(“5a65b71a3071ebb37576b3b56”),“id:“201801210013631847000000”,“地区”:“ntvp”,“车站”:“APPCB”,“臭氧”:25.0,“标志1”:“NA”,“氨”:11.4,“苯”:6.7,“标志2”:“NA”,“FLAG3:“NA”,“CREATE_DATE”:ISODate(“2018-03-20T18:32:50.000Z”),“DATA_FROM:“Gtuy”}@Vega我的预期输出是每个月的数字替换为avgofozone,因为所有@dnickless iam都在尝试此代码显示错误消息.“errmsg”:“未知组运算符”$mergeObjects”“,@dnickless我的mongodb版本3.4主要看到我的更新答案,应该从3.4.4开始运行@dnickless我得到了输出pettaran,但一些错误avarageozone被替换为像这样的年份{“Jan”:2018,“Mar”:2018,“zonetype”:“avgofozone”,“year”:2018}我想你是用Robo3T来运行这个查询的吧?这里似乎有一只古怪的虫子——我也有同样的行为。尝试改用mongo.exe运行查询。
    [
        { 
            "zone_type": "avgofozone", 
            "year": 2018, 
            "February": 21.07777777777778, 
            "March": 17.8, 
            "January": 17.8 
        }
    ]
{
    $addFields: {
        result: {
            $let: {
                vars: { "months": [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ], arr: { $objectToArray: "$$ROOT" } },
                in: {
                    "k" : { $arrayElemAt: [ "$$months" , { $subtract: [ { $arrayElemAt: [ "$$arr.v" , 2 ] }, 1 ] } ] },
                    "v" : { $arrayElemAt: [ "$$arr.v" , 0 ] }
                }
            }
        }
    }
}, {
    $group: {
        _id: "$year",
        result: { $push: "$result" },
    }
}, {
    $addFields: {
        "result": { $arrayToObject: "$result" },
    }
}, {
    $addFields: {
        "result.zonetype": "avgofozone",
        "result.year": "$_id"
    }
}, {
    $replaceRoot: {
        newRoot: "$result"
    }
}