MongoDB - $ size的参数必须是一个数组,但类型为:EOO / missing

时间:2014-06-13 08:41:21

标签: mongodb mongodb-query aggregation-framework iccube

尝试使用icCube创建MongoDB数据源。我们的想法是将数组的大小作为新字段返回。类似的东西:

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

但我在某些记录中遇到以下错误:

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

如果字段为空或不是数组(摆脱错误),是否存在大小为0的方法?

3 个答案:

答案 0 :(得分:89)

您可以在此处使用$ifNull运算符。看来该字段不是数组,也不是给定错误所不存在的字段:

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

另外,如果这些$type存在但不是数组,您可能需要检查$match中的{{3}}。

答案 1 :(得分:0)

替代解决方案是使用

消除具有空值的文档
$match: {myFieldArray: { $elemMatch: { $exists: true } }}

此外,被'$'引用用作$ size的参数的文档字段(此处为“ $ myFieldArray”)也必须是投影的一部分。

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

答案 2 :(得分:0)

从MongoDB 3.2及更高版本开始,您可以使用$isArray来检查您的字段是否为数组,以及$cond运算符,以返回使用$isArray进行求值的字段:

{ "$project": {
    "people": 1,
    "myFieldArrayCount": { 
        "$size": { 
            "$cond": [ 
                { "$isArray": "$myFieldArray" }, 
                "$myFieldArray", 
                []
            ]
        } 
    }
}}