Mongodb WeekofMonth?

时间:2016-05-11 13:24:53

标签: mongodb date-format mongodb-aggregation

我很难实现weekofMonth而不是WeekofYear。有人可以指导我如何做到这一点吗?

db.activity.aggregate([
    {
        $group:{
            _id: {
                week: { $week: "$createdAt" }, 
                month: { $month: "$createdAt" },      
                year: { $year: "$createdAt" } 
            },
            count: { $sum: 1 }
        }
     },
     { $match : { "_id.year" : 2016, "_id.month" : 5 } }
])

输出

/* 1 */
{
    "_id" : {
        "week" : 19,
        "month" : 5,
        "year" : 2016
    },
    "count" : 133.0
}

/* 2 */
{
    "_id" : {
        "week" : 18,
        "month" : 5,
        "year" : 2016
    },
    "count" : 1.0
}

在上面显示的数据中,它实际上没有显示weekofMonth。我怎样才能得到这个给定的第18周是月的第一周?

1 个答案:

答案 0 :(得分:3)

$ week 运算符为您提供described in the docs年中的一周。

可以通过获取月中的日期并除以7来计算月中的一周。

"weekOfMonth": {$subtract: [{$divide: [{$dayOfMonth: "$createdAt"}, 7]}, {$mod: [{$divide: [{$dayOfMonth: "$createdAt"}, 7]}, 1]}]},

请注意,这里的星期几为0。如果您希望它从1开始$add 1.另外,$floor运算符是版本3.2中的新运算符。

修改

您可以使用$mod(版本3.0中存在)

来模拟发言权
CREATE MEMBER CURRENTCUBE.[Measures].[Count Improvements] AS
SUM(IIF([Measures].[Improvement] = [Measures].[Improvement base], 1, 0));