MongoDB-$size的参数必须是数组,但类型为:EOO/missing
正在尝试使用创建MongoDB数据源。其思想是将数组的大小作为新字段返回。比如: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?您可以在此处使用运算符。该字段似乎不
$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",
[]
]
}
}
}}