我有一份包含日期的文件,我想按季度分组文件。 我怎么能在MongoDB中做到这一点? 我的架构是:
var ekgsanswermodel = new mongoose.Schema({
userId: {type: Schema.Types.ObjectId},
topicId : {type: Schema.Types.ObjectId},
ekgId : {type: Schema.Types.ObjectId},
answerSubmitted :{type: Number},
dateAttempted : { type: Date},
title : {type: String},
submissionSessionId : {type: String}
});
第一季度包含第1,2,3个月。 第二季度包含第4季度,第5季度,第6季度等第四季度。 我的最终答案应该是:
"result" : [
{
_id: {
quater:
},
_id: {
quater:
},
_id: {
quater:
},
_id: {
quater:
}
}
答案 0 :(得分:15)
您可以使用$cond
运算符来检查:
$month
为<= 3
,投影名为quarter
的字段
价值为“一”。$month
为<= 6
,投影名为quarter
的字段
价值为“两个”。$month
为<= 9
,投影名为quarter
的字段
价值为“三”。quarter
的值将为“第四”。$group
字段后quarter
。代码:
db.collection.aggregate([
{$project:{"date":1,
"quarter":{$cond:[{$lte:[{$month:"$date"},3]},
"first",
{$cond:[{$lte:[{$month:"$date"},6]},
"second",
{$cond:[{$lte:[{$month:"$date"},9]},
"third",
"fourth"]}]}]}}},
{$group:{"_id":{"quarter":"$quarter"},"results":{$push:"$date"}}}
])
特定于您的架构:
db.collection.aggregate([
{$project:{"dateAttempted":1,"userId":1,"topicId":1,"ekgId":1,"title":1,
"quarter":{$cond:[{$lte:[{$month:"$dateAttempted"},3]},
"first",
{$cond:[{$lte:[{$month:"$dateAttempted"},6]},
"second",
{$cond:[{$lte:[{$month:"$dateAttempted"},9]},
"third",
"fourth"]}]}]}}},
{$group:{"_id":{"quarter":"$quarter"},"results":{$push:"$$ROOT"}}}
])
答案 1 :(得分:0)
您可以使用以下命令对文档进行季度分组。
{
$project : {
dateAttempted : 1,
dateQuarter: {
$trunc : {$add: [{$divide: [{$subtract: [{$month:
"$dateAttempted"}, 1]}, 3]}, 1]}
}
}
}