2017-06-17 57 views
0

试图找出是否可以使用mongoose和nodejs进行此查询。查询日期还是不存在?

Product.find({ 
     price: { $gt: 2, $lt: 3}, 
     date: { $gt: new Date() || $exists: false} 
    }). exec(callback); 

有谁知道是否有可能来检查日期不存在发回或日期是大于今天?

感谢

回答

1

使用$or

Product.find({ 
    "price": { "$gt": 2, "$lt": 3 }, 
    "$or": [ 
    { "date": { "$gt": new Date() } }, 
    { "date": { "$exists": false } } 
    ] 
}). exec(callback); 

所有参数一般都是含蓄蕴借的,所以就像是你说除了“价格比2且小于3时” “并且日期大于此日期或日期不存在”

只是为了阐明在词组

逻辑用“这样的多个领域,THEN你实际使用的$and

Product.find({ 
    "$and": [ 
    { "price": { "$gt": 2, "$lt": 3 } }, 
    { "$or": [ 
     { "date1": { "$gt": new Date() } }, 
     { "date1": { "$exists": false } } 
    ]}, 
    { "$or": [ 
     { "date2": { "$gt": new Date() } }, 
     { "date2": { "$exists": false } } 
    ]} 
    ] 
}). exec(callback); 
+0

我可以做多$ ORS如果我有DATE1和date2并希望对两者进行同样的检查?“$或”:[ {“date”:{“$ gt”:new Date()}}, {“date”:{“$ exists”:false}} “$或”:[ {“date2”:{“$ gt”:new Date()}}, {“ ” date2“:{”$ exists“:false}} ] – Lion789

+1

@ Lion789是的。这是你真正使用和明确的'$和'运算符的情况之一。与$或'相同的基本原因是参数在数组中。不像你这样做,但像我这样做。查看答案内容。 –

+0

谢谢,我想知道这是否允许,不断得到一个错误:{_id:{$ nin:[userObj.ids]} ....该数组是空的,但它给了我一个CastError:对于模型“Product” – Lion789