2017-03-19 5 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 월 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)의 형식은 무엇입니까? 그들은 날짜 형이어야합니다. –

+0

@BertrandMartel graphQL에는 날짜 유형이 없으며 쿼리 할 때 사용하기 때문에 ISO 문자열로 저장합니다 (예 :'new Date(). toISOString()'). – alfiepoleon

답변

1
당신은 당신의 스키마를 업데이트 할 수 있습니다

그냥 배열로 값 days:["Friday", "Monday"]days: [String] 같은

뭔가 일을 저장하고 쿼리 아래 시도 (순간 몽구스 사용) .

Event.find({ 
    $or: [ 
    { 'details.startDate': todayDateISO }, 
    { $and: 
     [ 
      { 'details.startDate': { $lte: todayDateISO } }, 
      { 'details.endDate': { $gte: todayDateISO } }, 
      { 'details.days': todayDay } 
     ] 
    } 
    ] 
}).sort({ 'profile.startTime': 1 }).exec() 
관련 문제