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

时间:2016-06-10 05:47:53

标签: node.js mongodb mongoose mongodb-query mongoose-schema

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
    }
  }
})

而不是日期,我需要在几个月内对销售进行分组,如何在nodejs中对销售进行分组

1 个答案:

答案 0 :(得分:0)

我首先在聚合链中使用projection来提取月度和年度值,然后进行分组:

<doc-name>.aggregate([
    { $project:
        { _id: 1,
          year: { $year: "$date" },
          month: { $month: "$date"},
          amount: 1
        }
    },
    { $group:
        { _id: { year: "$year", month: "$month" },
          sum: { $sum: "$amount" }
        } 
    }])

我也试过你的模特:

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
});

运行查询:

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)});

得到了一个合理的结果: result of aggregate query

相关问题