预期条件
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 :(得分:3)
语法: - {$或:[expression1,expression2,...]}
看看这是否可以帮到你: -
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