0

首先是功能:

static async getInitRegistrationMetric(account) {
// we want only full day so we exclude current date
const exclude = DateTime.now()
  .setZone('utc')
  .startOf('day')
  .toISODate();

// this count the number of client created by day.
const groupByDate = {
  $group: {
    _id: {
      $dateToString: { format: '%Y-%m-%d', date: '$createdAt' },
    },
    count: { $sum: 1 },
  },
};

// this is a way to rename (_id, count) to (date, value)
const renameData = {
  $project: {
    _id: 0,
    date: '$_id',
    value: '$count',
  },
};

// this is done to filter data, I want to clean the null date and the today result
const excludeTodayAndNull = {
  $match: {
    $and: [
      {
        date: {
          $ne: exclude,
        },
      },
      {
        date: {
          $ne: null,
        },
      },
    ],
  },
};

// account is the mongoose model.
return account.aggregate([groupByDate, renameData, excludeTodayAndNull]);

}

此代码将产生如下数据:

const data = [  
  { date: '2000-10-01', value: 50 },
  { date: '2000-10-03', value: 12 },
  { date: '2000-10-07', value: 112 },
];

问题是我在每月的 2 号、4 号、5 号和 6 号没有价值。我的想法是强制 mongo “创建” void 在其他日子有效,如下所示:

const data = [
    { date: '2000-10-01', value: 50 },
    { date: '2000-10-02', value: 0 },
    { date: '2000-10-03', value: 12 },
    { date: '2000-10-04', value: 0 },
    { date: '2000-10-05', value: 0 },
    { date: '2000-10-06', value: 0 },
    { date: '2000-10-07', value: 112 },
];

我如何要求“聚合”以 0 作为值的数据填补重要日期之间的空白?

谢谢

PS:我已经用js中的代码做了,但是看起来又重又丑。我试着做得更干净。

4

0 回答 0