2017-03-19 32 views
0

我有一个MongoDB的猫鼬事件的模式,看起来像这样一部分。MongoDB的查询如果嵌套布尔值为true

... 
    details: { 
    startDate: String, 
    endDate: String, 
    startTime: Number, 
    endTime: Number, 
    days: { 
     monday: Boolean, 
     tuesday: Boolean, 
     wednesday: Boolean, 
     thursday: Boolean, 
     friday: Boolean, 
     saturday: Boolean, 
     sunday: Boolean, 
    }, 
    }, 
... 

我需要查询那一天正在发生的事件,那就是,有开始日期为当天的活动,或者有在将来的日期在过去日期的开始日期和结束日期的活动,而那个周日在那个特定的日子里是真实的。 例如,每周五举行的欢乐周五活动,开始日期为2017年1月1日,2017年12月31日结束,我如何查询该活动是在每年的每个周五出现的?

这是我应得的,我现在有点迷失。 (使用时刻和猫鼬)

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(), 

任何帮助,将不胜感激:)

+0

什么'startDate'和'endDate'(YYYY-MM-DD/DD-MM-YYYY)的格式?他们应该是的'Date'类型 –

+0

@BertrandMartel graphQL没有一个日期类型,它是我用它来查询,所以我把它们保存为ISO字符串,e.g'新的Date()。toISOString()' – alfiepoleon

回答

1

您可以更新您的模式,只是存储日内阵列

喜欢的东西days: [String]与价值观days:["Friday", "Monday"]尝试按照以下查询。

​​