Meteor MongoDB:如何使用收集字段的计算最终日期汇总日期范围



我正在使用MeteorHacks:流星的聚合软件包,我正在尝试在以下日期范围内查找事件:

  • 现在减去一天。
  • 活动的末期,加上两个星期。

问题是,末端日期存储在事件文档中,在times.until的字段中。事件文档看起来像这样:

// Event collection doc:
{
  _id: 'abc',
  times: {
    start: {
      dateTime: "ISODate("2017-03-07T00:00:00Z"),
      timeZone : "America/Chicago"
    },
    until: "20170307T000000Z"
  }
}

我能够汇总以在某个范围内找到日期,但是我不知道如何根据事件的times.until字段计算该范围的末端日期。

if (Meteor.isServer) {
  Meteor.methods({
    'events.inProgress'() {
      const start = moment().utc().subtract(1, 'day').toDate();
      return Events.aggregate([
        {$match: {"times.start.dateTime": {$gt: start, $lt: end**(MUST COMPUTE end FROM DOC'S times.until PLUS 2 WEEKS)**}}},
      ]);
    }
  }
}

另外,请注意times.until字段的格式是20170307T000000Z(不确定此格式的正确名称)。这不是JavaScript Date的有效格式,而是MOMT.JS处理此字符串没问题。通过访问times.until字段,我可以做:

const end = moment(event.times.until).add(2, 'week').toDate();

这确实给了我正确的范围末期,但是如何在构造管道时抓取times.until字段来计算末端日期?

使用 $ add 添加毫秒以获取所需的日期。当然,这意味着时代。直到 是mongo日期类型。

aggregate([{
    $match: {
        "times.start.dateTime": {
            $gt: start,
            $lt: {
                $add: ["$times.until", 14 * 24 * 60 * 60000]
            }
        }
    }
}])

最新更新