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

MongoDB-$size的参数必须是数组,但类型为:EOO/missing,mongodb,mongodb-query,aggregation-framework,iccube,Mongodb,Mongodb Query,Aggregation Framework,Iccube,正在尝试使用创建MongoDB数据源。其思想是将数组的大小作为新字段返回。比如: $project: { "people": 1, "Count myFieldArray" : {$size : "$myFieldArray" } } 但我得到的一些记录有以下错误: The argument to $size must be an Array, but was of type: EOO 如果字段为空或不是数组(消除错误),是否有方法将大小设置为0?您可以在此处使用运算符。该字段似乎不

正在尝试使用创建MongoDB数据源。其思想是将数组的大小作为新字段返回。比如:

$project:
{ 
 "people": 1, 
 "Count myFieldArray" : {$size : "$myFieldArray" }
}
但我得到的一些记录有以下错误:

The argument to $size must be an Array, but was of type: EOO
如果字段为空或不是数组(消除错误),是否有方法将大小设置为0?

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

{“$project”:{
"人":一,,
“计数”:{
“$size”:{“$ifNull”:[“$myFieldArray”,[]]
}
}}

此外,如果这些文件确实存在但不是数组,您可能需要检查是否存在空文件。

替代解决方案是使用

$match: {myFieldArray: { $elemMatch: { $exists: true } }}
此外,用作“$”引用的$size参数的文档字段(此处为“$myFieldArray”)也必须是投影的一部分

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

在MongoDB 3.2及更新版本中,您可以使用检查字段是否为数组,并使用运算符在计算时返回字段:


非常感谢,它很有效。奇怪的是,未定义字段的$size不是0(对于所有无数组类型,实际上都是0)。我希望一个非SQL数据库更加出色(如果mongo db的家伙读到这一点:-)@ic3不是真的,这就是为什么
$ifNull
存在的原因。同样的警告也适用于像
$unwind
这样的运算符,在这些运算符中,您需要小心数组不是空的或丢失的,否则将导致删除父文档或产生类似错误。
{ "$project": {
    "people": 1,
    "myFieldArrayCount": { 
        "$size": { 
            "$cond": [ 
                { "$isArray": "$myFieldArray" }, 
                "$myFieldArray", 
                []
            ]
        } 
    }
}}