2016-06-08 50 views
0

當字段不存在或當該字段的子字段滿足某些條件時,我需要查找文檔。Mongodb查詢 - 僅當字段存在時將條件應用於子字段

在這裏問了一個類似的問題:Mongodb query - apply condition only if field exists。我將使用代碼從這個答案來說明:

db.stackoverflow.find({ 
    $or: [ 
    { howmuch: { $exists:false } }, 
    { 'howmuch.chocolate':5 } 
    ]}) 

當然,當我這樣做,我得到一個錯誤,當howmuch是不確定的。我知道我可以測試是否存在'howmuch.chocolate',但這不會改變任何事情。有沒有辦法做到這一點?

+1

你會得到什麼錯誤? – chridam

回答

2

這應該工作:

db.stackoverflow.find({ 
    $or: [ 
    { howmuch: { $exists:false } }, 
    { $and: [{ 'howmuch.chocolate': { $exists: true } } ,{ 'howmuch.chocolate':5 }]} 
    ]}) 

按照documentation,如果$and陣列中的第一個表達式評估爲假,剩餘表達式不被評估。

+1

爲什麼這應該工作,如果OP的查詢失敗?也許我在這裏錯過了一些東西。 – styvane

+0

@ user3100115使用'$和'運算符,將會阻止錯誤,因爲將首先執行字段檢查,如果失敗,則不會評估第二部分(導致錯誤的部分)。 – ZeMoon

+0

我想到了這一點,但錯過了那個說如果第一個表達式的計算結果爲false的部分,剩下的表達式就不會被評估。非常感謝!下次我會更仔細地閱讀文檔:) – 7hibault