2014-05-18 10 views
9

Có cách nào để thực hiện $ hoặc câu lệnh trong phần tử khớp không?

Tôi có điều này:

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

và muốn thêm openingMorning đến l

Làm thế nào tôi có thể mở rộng nó như:

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

là một cái gì đó như thể này?

Trả lời

13

Chắc chắn đó là, chỉ cần thanh toán bù trừ cú pháp nhưng về cơ bản bạn đã có nó:

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

      ] 
     } 
    } 
} 

Và được đưa ra một ý tưởng mẫu của dữ liệu:

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

Một thời gian hiện tại của 12 sẽ khớp với tài liệu đầu tiên nhưng không phải là tài liệu thứ hai nhưng giá trị là 13 sẽ khớp với cả hai.

Cũng lưu ý rằng chúng nằm trong một mảng để cho mục đích ước tính của bạn, bạn có thể muốn có trường "dayOfWeek" để bao gồm trong đó cũng như

Các vấn đề liên quan