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

问题描述 投票:45回答:2

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

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

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

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

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

mongodb mongodb-query aggregation-framework iccube
2个回答
92
投票

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

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

您也可以在$type中检查$match,以防这些确实存在但不是数组。


0
投票

替代解决方案是使用null来消除带有空值的文档

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

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

$project:
{ 
 "people": 1,
 "myFieldArray":1,
 "Count myFieldArray" : {$size : "$myFieldArray" }
}
© www.soinside.com 2019 - 2024. All rights reserved.