Ayy*_*a A 5 date-format mongodb 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 } }
])
Run Code Online (Sandbox Code Playgroud)
输出
/* 1 */
{
"_id" : {
"week" : 19,
"month" : 5,
"year" : 2016
},
"count" : 133.0
}
/* 2 */
{
"_id" : {
"week" : 18,
"month" : 5,
"year" : 2016
},
"count" : 1.0
}
Run Code Online (Sandbox Code Playgroud)
在上面显示的数据中,它实际上没有显示weekofMonth
。我怎样才能得到这个给定的第 18 周是一个月的第一周?
$week运算符为您提供一年中的第几周,如文档中所述。
通过获取该月的第几天并除以 7 可以计算出该月的第几周。
db.activity.aggregate([
{$project: {
"year": {$year: "$createdAt"},
"month": {$month: "$createdAt"},
"weekOfMonth": {$floor: {$divide: [{$dayOfMonth: "$createdAt"}, 7]}}
}},
{$group: {
"_id": {"year": "$year", "month": "$month", "weekOfMonth": "$weekOfMonth"},
count: { $sum: 1 }
}},
{$match : { "_id.year" : 2016, "_id.month" : 5}}
])
Run Code Online (Sandbox Code Playgroud)
请注意,此处的月份周数是从 0 开始的。如果你希望它从 1 开始,只需$add 1。此外,$floor运算符是 3.2 版本中的新运算符。
编辑
你可以使用$mod(3.0版本中存在)来模拟地板
"weekOfMonth": {$subtract: [{$divide: [{$dayOfMonth: "$createdAt"}, 7]}, {$mod: [{$divide: [{$dayOfMonth: "$createdAt"}, 7]}, 1]}]},
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
977 次 |
最近记录: |