2017-06-17 52 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