2015-04-01 37 views
2

有沒有方法可以投影可能存在或可能不存在的字段?如定義爲null或undefined?MongoDB - 投影並不總是存在的字段

舉例來說,我做一個查詢以:

 $project: { 
     date: 1, 
     name: "$person.name", 
     age: "$person.age" 
     }    

並非所有的文件都保證有$ person.age,但不是那些沒有年齡返回爲{日期:今天,姓名:「Bill」},我希望它說{日期:今天,名稱:「Bill」,age:null}。或類似的東西。

有沒有更好的方法,而不是隻是迭代後的數據和創建字段,如果他們不存在?

+1

有一個空值的字段而根本沒有字段有什麼區別? – 2015-04-01 18:38:46

+0

我使用的一些模塊將其導出到Excel文件或打印到網格中,如果第一個文檔沒有特定的字段,則該列將留空。 – 2015-04-01 18:46:18

回答

6

使用$ifNull

$project: { 
    date: 1, 
    name: "$person.name", 
    age: { $ifNull: [ "$person.age", "null" ] } 
    } 

你可以找到更多關於它here

+0

解釋downvote? – 2015-04-01 18:53:17

+0

謝謝,這很完美。 – 2015-04-01 18:54:16

+0

高興地幫助:) – 2015-04-01 18:54:35

1

這就是$ifNull表達式的問題。從docs$ifNull

計算表達式,並且如果 表達式計算爲一個非空值返回表達式的值。如果表達式將 評估爲空值(包括未定義值的實例或缺少 字段),則返回替換表達式的值。

在你的情況,下面將使用$ifNull表達式返回任何非空$person.age字段值或字符串「未指定」如果年齡字段爲空或不存在:

$project: { 
    date: 1, 
    name: "$person.name",   
    age: { $ifNull: [ "$person.age", "Unspecified" ] } 
}