2014-05-18 41 views
9

有没有办法在元素匹配中执行$或语句?

我有这样的:

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

,并想openingMorning添加到L

如何延长它:

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”字段也包含在那里以及