Node.js 如何根据nodejs中的月份对数据进行分组?

Node.js 如何根据nodejs中的月份对数据进行分组?,node.js,mongodb,mongoose,mongodb-query,mongoose-schema,Node.js,Mongodb,Mongoose,Mongodb Query,Mongoose Schema,我需要以月为单位对销售额进行分组,而不是以日期为单位对销售额进行分组,如何在nodejs中以月为单位对销售额进行分组我使用聚合链中的第一个来提取月值和年值,然后进行分组: Sale.aggregate({ $match: filter }, { $group: { "_id": { "store_id": "$store_id", //"created_on": { $dateToString: { format: "%Y-%m-%d", date: "$

我需要以月为单位对销售额进行分组,而不是以日期为单位对销售额进行分组,如何在nodejs中以月为单位对销售额进行分组我使用聚合链中的第一个来提取月值和年值,然后进行分组:

Sale.aggregate({
  $match: filter
}, {
  $group: {
    "_id": {
      "store_id": "$store_id",
      //"created_on": { $dateToString: { format: "%Y-%m-%d", date: "$strBillDate" } }
    },
    month: {
      $month: "$strBillDate"
    },
    store_id: {
      $first: "$store_id"
    },
    strBillAmt: {
      $sum: "$strBillAmt"
    },
    strBillNumber: {
      $sum: 1
    }
  }
})
创建一些测试数据:

var testSchema = mongoose.Schema({
  store_id: { type: String },
  strBillNumber: { type: String },
  strBillDate: { type: Date },
  strBillAmt: { type: Number }
});

var Test = mongoose.model("Test", testSchema);
运行查询:

var test = new Test({
  store_id: "1",
  strBillNumber: "123",
  strBillDate: new Date("2016-04-02"),
  strBillAmt: 25
});
var test2 = new Test({
  store_id: "1",
  strBillNumber: "124",
  strBillDate: new Date("2016-04-01"),
  strBillAmt: 41
});
var test3 = new Test({
  store_id: "3",
  strBillNumber: "125",
  strBillDate: new Date("2016-05-13"),
  strBillAmt: 77
});
并得到了合理的结果:

显示您的db结构。store_id:{type:String},strBillNumber:{type:String},strBillDate:{type:Date},strBillAmt:{type:Number},是否由于数据模型的原因而出现错误或无法工作?我用您提供的模式进行了另一次尝试,并编辑了我的文章以支持您的数据。如果有帮助,请看一看。
var test = new Test({
  store_id: "1",
  strBillNumber: "123",
  strBillDate: new Date("2016-04-02"),
  strBillAmt: 25
});
var test2 = new Test({
  store_id: "1",
  strBillNumber: "124",
  strBillDate: new Date("2016-04-01"),
  strBillAmt: 41
});
var test3 = new Test({
  store_id: "3",
  strBillNumber: "125",
  strBillDate: new Date("2016-05-13"),
  strBillAmt: 77
});
Test.aggregate([
    { $project:
        { store_id: 1,
            yearBillDate: { $year: "$strBillDate" },
            monthBillDate: { $month: "$strBillDate" },
            strBillAmt: 1
        }
    },
    { $group:
        { _id: {yearBillDate: "$yearBillDate", monthBillDate:"$monthBillDate"},
          sum: { $sum: "$strBillAmt" }
        }
    }
    ], function(err, result) {
        console.log(err, result)});