2017-03-19 1 views
0

私はMongoDB Mongooseイベントスキーマを持っています。MongoDBネストされたブール値が真であるかどうかの問い合わせ

... 
    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月、終了日が2017年12月31日で、毎週金曜日に表示されます。

これは私が持っているもので、私はちょっと迷っています。すべてのヘルプは大歓迎されます:)

+0

'startDate'と' endDate'(YYYY-MM-DD/DD-MM-YYYY)の形式は何ですか?それらは 'Date'タイプのものでなければなりません –

+0

@BertrandMartel graphQLは日付型を持たず、それを私が使っているので、ISOの文字列として保存します。例えば' new Date()。toISOString() ' – alfiepoleon

答えて

1

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

(モーメントとマングースを使用して)あなただけの値days:["Friday", "Monday"]days: [String]のような配列

ものとして日を保存し、クエリの下にしようとするあなたのスキーマを更新することができます。

​​
関連する問題