【发布时间】:2017-08-11 00:19:32
【问题描述】:
我有一个 MongoDB Mongoose 事件架构,部分看起来像这样。
...
details: {
startDate: String,
endDate: String,
startTime: Number,
endTime: Number,
days: {
monday: Boolean,
tuesday: Boolean,
wednesday: Boolean,
thursday: Boolean,
friday: Boolean,
saturday: Boolean,
sunday: Boolean,
},
},
...
我需要查询当天发生的事件,即开始日期为当天的事件,或者开始日期为过去日期,结束日期为未来日期的事件,以及工作日在那个特定的日子里是真的。 比如一个Happy Friday活动,每周五举行一次,开始日期是2017年1月1日,结束日期是2017年12月31日,我如何查询它在一年中的每个星期五出现?
这就是我所拥有的,我现在有点迷失了。 (使用 moment 和 Mongoose)
const todayDateISO = moment().startOf('d').add(1, 'd').toISOString();
const todayDay = moment().startOf('d').add(1, 'd').format('dddd');
Event.find({
$or: [
{ 'details.startDate': todayDateISO },
{
$and: [
{
$and: [
{ 'details.startDate': { $lte: todayDateISO } },
{ 'details.endDate': { $gte: todayDateISO } },
],
},
{
// details.days.[day] is true
}
]
},
],
}).sort({ 'profile.startTime': 1 }).exec(),
任何帮助将不胜感激:)
【问题讨论】:
-
startDate和endDate(YYYY-MM-DD / DD-MM-YYYY) 的格式是什么?它们应该是Date类型 -
@BertrandMartel graphQL 没有日期类型,这是我用来查询的,所以我将它们保存为 ISO 字符串,例如
new Date().toISOString()
标签: mongodb mongoose mongodb-query aggregation-framework