2014-05-18 2 views
9

Есть ли способ сделать соответствие $ или statement в элементе?

У меня есть это:

opened: { 
    $elemMatch: { 
     closed: false 
     openingEvening: {$lte: currentTime}, 
     closingEvening: {$gte: currentTime}, 
    } 
} 

и хотел бы добавить openingMorning к л

Как я могу продлить его как:

opened: { 
    $elemMatch: { 
     closed: false 
     {$or: [ 
      {openingEvening: {$lte: currentTime}, closingEvening: {$gte: currentTime},}, 
      {openingMorning: {$lte: currentTime}, closingMorning: {$gte: currentTime}} 
     ] 
     } 
    } 
} 

что-то подобное возможно?

ответ

13

Конечно, это просто прояснение синтаксиса, но вы в основном были это:

{ 
    "opened": { 
     "$elemMatch": { 
      "closed": false, 
      "$or": [ 
       { 
        "openingEvening": { "$lte": currentTime }, 
        "closingEvening": { "$gte": currentTime } 
       }, 
       { 
        "openingMorning": { "$lte": currentTime }, 
        "closingMorning": { "$gte": currentTime } 
       } 

      ] 
     } 
    } 
} 

И дали образец идею данных:

{ 
    "_id" : ObjectId("537969cee90c3db84958aa86"), 
    "opened" : [ 
      { 
        "closed" : false, 
        "openingEvening" : 17, 
        "closingEvening" : 22, 
        "openingMorning" : 11, 
        "closingMorning" : 14 
      } 
    ] 
} 
{ 
    "_id" : ObjectId("53796a47e90c3db84958aa87"), 
    "opened" : [ 
      { 
        "closed" : false, 
        "openingMorning" : 13, 
        "closingMorning" : 14 
      } 
    ] 
} 

Тока время 12 бы соответствуют первому, но не второму документу, но значение 13 соответствует совпадению.

Также отмечая, что они находятся в массиве, поэтому с учетом вашей предполагаемой цели вы, вероятно, захотите также включить поле «dayOfWeek»