Mongoose 如何在MongoDB中按季度分组日期

Mongoose 如何在MongoDB中按季度分组日期,mongoose,mongodb-query,Mongoose,Mongodb Query,我有一个包含日期的文档,我想按季度对文档进行分组。 我如何在MongoDB中执行此操作? 我的模式是: var ekgsanswermodel = new mongoose.Schema({ userId: {type: Schema.Types.ObjectId}, topicId : {type: Schema.Types.ObjectId}, ekgId : {type: Schema.Types.ObjectId}, answerSubmitted :{t

我有一个包含日期的文档,我想按季度对文档进行分组。 我如何在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:
     }
  } 
您可以使用操作员检查是否:


  • 您可以使用下面的方法按季度对文档进行分组

    {
        $project : {
            dateAttempted : 1,
            dateQuarter: {
                $trunc : {$add: [{$divide: [{$subtract: [{$month: 
                "$dateAttempted"}, 1]}, 3]}, 1]}
            }
        }
    }
    

    你试过使用MongoDB的mapreduce吗?我想你可以用四舍五入的月数/4来描绘你的月份。类似于emit的东西(this.number/4,this.number)。在REDUCE部分,您一直在分组。我没有尝试过mapreduce。我可以举个例子。我也在上面添加了模式。不管我的解决方案是@grishabh,下面的解决方案更好。Mongodb mapreduce不允许由于reduce操作而拥有数组。参考:thanx@Batshray,请您在spring data mongodb中进行此查询。