如何在mongo聚合中将数字转换为月份

时间:2018-04-17 05:20:17

标签: mongodb mongoose mongodb-query aggregation

我正在尝试这个mongo聚合我得到了输出但我的要求是得到月份名称任何人请建议我。尝试不同类型的聚合我没有得到我的要求输出

    db.collection.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"}
            } },
            { $sort:{ "year": -1 } },
            { $project: {
                year: '$_id.year',
                avgofozone: '$avgofozone',
                month: '$_id.month',_id:0
            } }
       ])
    output:
    {
    "year" : 2018,
    "avgofozone" : 16.92,
    "month" : 4
}

/* 2 */
{
    "year" : 2017,
    "avgofozone" : 602.013171402383,
    "month" : 12
}
expected output:
{
    "year" : 2018,
    "avgofozone" : 16.92,
    "month" : APRIL
}

/* 2 */
{
    "year" : 2017,
    "avgofozone" : 602.013171402383,
    "month" : DECEMBER
}

1 个答案:

答案 0 :(得分:3)

我认为在mongo中不可能直接实现。但我们可以使用Sub main() Dim LastRow2 As Long LastRow2 = Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row Sheets("Sheet2").Range("B2:B" & LastRow2).Copy Sheets("Sheet1").Range("D2").PasteSpecial xlPasteValues MsgBox LastRow1 ' this would return Sheet1 column D last not empty row index MsgBox Sheets("Sheet1").Range("D2:D" & LastRow1).Address 'this would return the address of Sheet1 column D range from cell D2 down to last not empty cell End Sub 将数字映射到月份的字符串版本。您可以添加以下内容作为将数字映射到字符串的最后阶段。

$let

您可以提供所需格式的月份字符串。例如,我提供了{ $addFields: { month: { $let: { vars: { monthsInString: [, 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', ...] }, in: { $arrayElemAt: ['$$monthsInString', '$month'] } } } } }