2016-06-09 151 views
1

预期条件

if(pid==req.session.pid && 
    ((status==0 && StatusDate1>=somedate)||(status==1 && StatusDate2>=somedate)|| 
    (status==2 && StatusDate3>=somedate)||(status==0 && StatusDate1>=somedate))) 

我试图写下面$match声明,以满足上述条件,但由于某种原因不能按预期。

var match = { $match: { 
    $and: [ 
     { practiceId: req.session.p_id }, 
     { 
      $or:[{status : 0, StatusDate1:{$gte:somedate}}] 
     }, 
     {   
      $or:[{status : 1, StatusDate2:{$gte:somedate}}] 
     }, 
     {   
      $or:[{status : 2, StatusDate3:{$gte:somedate}}] 
     }, 
     {   
      $or:[{status : 3, StatusDate4:{$gte:somedate}}] 
     }] 
    } 
} 

请问谁能告诉我正确的方向?

更新

尝试以下的版本,还是没有得到我所期待的。

尝试1

var match = { $match: { 
    $and: [ 
     { practiceId: req.session.p_id }], 
    $and:[ 
     { 
      $or:[{status : 0, StatusDate1:{$gte:somedate}}] 
     }, 
     {   
      $or:[{status : 1, StatusDate2:{$gte:somedate}}] 
     }, 
     {   
      $or:[{status : 2, StatusDate3:{$gte:somedate}}] 
     }, 
     {   
      $or:[{status : 3, StatusDate4:{$gte:somedate}}] 
     }] 
    } 
} 

尝试2

var match = { $match: { 
    practiceId: req.session.p_id , 
    $and:[ 
     { 
      $or:[{status : 0, StatusDate1:{$gte:somedate}}] 
     }, 
     {   
      $or:[{status : 1, StatusDate2:{$gte:somedate}}] 
     }, 
     {   
      $or:[{status : 2, StatusDate3:{$gte:somedate}}] 
     }, 
     {   
      $or:[{status : 3, StatusDate4:{$gte:somedate}}] 
     }] 
    } 
} 

尝试3

var match = { $match: { 
    practiceId: req.session.p_id, 
     $and:[ 
     { 
      $or:[{status : 0,StatusDate1:{$gte:somedate}}], 
      $or:[{status : 1,StatusDate2:{$gte:somedate}}], 
      $or:[{status : 2,StatusDate3:{$gte:somedate}}], 
      $or:[{status : 3,StatusDate4:{$gte:somedate}}] 
     } 
    ] 
    } 

}

+0

“$ or”表达式中的“somedate”是否相同? – styvane

+0

@ user3100115是的..它是相同的...... –

回答

2

语法: - {$或:[表达式1,表达式2,...]}

看看这可以帮助你: -

var match = { $match: { 
$and: [ 
    { practiceId: req.session.p_id }, 
    { 
     $or:[{status : 0, StatusDate1:{$gte:somedate}}, 
      {status : 1, StatusDate2:{$gte:somedate}}, 
      {status : 2, StatusDate3:{$gte:somedate}}, 
      {status : 3, StatusDate4:{$gte:somedate}}] 
    }] 
} 
} 

新增,分离内$or条件。请参阅$or

+0

没有好友..这没有再次工作..将更新我的尝试在我的OP .. –

+0

你可以尝试更新的答案? – Shrabanee

+1

是的..这实际上工作..非常感谢你.. :) –