2014-06-13 140 views
25

嘗試使用icCube創建MongoDB數據源。這個想法是將數組的大小作爲新的字段返回。喜歡的東西:

$project: 
{ 
"people": 1, 
"Count myFieldArray" : {$size : "$myFieldArray" } 
} 

但我發現了一段記錄了以下錯誤:

The argument to $size must be an Array, but was of type: EOO 

有沒有一種方式,大小,如果該字段爲空或不是一個數組(除暴安良0錯誤) ?

回答

55

您可以在這裏使用$ifNull運算符。看來字段是不是一個數組或不存在由給定的錯誤:

{ "$project": { 
    "people": 1, 
    "Count": { 
     "$size": { "$ifNull": [ "$myFieldArray", [] ] } 
    } 
}} 

而且你可能想在你的$match的情況下,以檢查這些$type確實存在,但不是一個數組。

+1

非常感謝它的工作。奇怪的是,一個未定義的字段的$大小不是0(對於所有沒有數組的類型實際上是0)。我希望nonsql數據庫更加寬鬆(如果一個mongo db的人閱讀這個:-)) – ic3

+2

@ ic3不是真的,這就是爲什麼'$ ifNull'存在。同樣的警告適用於像'$ unwind'這樣的操作符,在這裏你需要小心數組不是空的或者沒有丟失,否則你將導致刪除父文檔或者產生類似的錯誤。 –

相關問題