72

尝试使用icCube创建 MongoDB 数据源。这个想法是将数组的大小作为新字段返回。就像是 :

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

但我得到一些记录以下错误:

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

如果字段为空或不是数组(消除错误),有没有办法将大小设为 0?

4

3 回答 3

137

您可以在$ifNull此处使用运算符。似乎该字段不是数组或给定错误不存在:

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

此外,如果这些确实存在但不是数组,$type您可能还想检查一下。$match

于 2014-06-13T08:50:49.657 回答
4

从 MongoDB 3.2 及更高版本开始,您可以使用$isArray以下运算符来检查您的字段是否为数组,以$cond在评估时返回该字段$isArray

{ "$project": {
    "people": 1,
    "myFieldArrayCount": { 
        "$size": { 
            "$cond": [ 
                { "$isArray": "$myFieldArray" }, 
                "$myFieldArray", 
                []
            ]
        } 
    }
}}
于 2019-08-23T08:07:22.497 回答
0

替代解决方案是使用空值消除文档

$match: {myFieldArray: { $elemMatch: { $exists: true } }}

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

$project:
{ 
 "people": 1,
 "myFieldArray":1,
 "Count myFieldArray" : {$size : "$myFieldArray" }
}
于 2019-06-11T09:01:59.960 回答