我很难实现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周是月的第一周?
答案 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));