我正在使用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]
}
}
}
}])