为什么我不能使用$size和$project步骤,然后用$match过滤结果?



我在mongo集合中具有这种类型的对象:

[  ...
   {array: ['keyword1', 'keyword2'], someField: "text", ...}
   ...
]

我想使用这样的聚合:

db.getCollection("SomeCollection").aggregate(
    [   ...
        { "$project" : { "size" : {"$size" : "$someField"}}}
        { "$match": {size: {$gte: 2} } }
        ...
])

当我添加匹配步骤时,我有此错误消息:

{  
    "ok" : 0.0, 
    "errmsg" : "The argument to $size must be an array, but was of type: missing",
    "code" : NumberInt(17124), 
    "codeName" : "Location17124"
}

我敢肯定有超过2个元素的数组。

我很好奇为什么这个错误。为了记录,我在" coll.find"查询中使用$进行解决方法。

聚合正在返回错误,因为第一阶段是将非阵列字段(someField(传递给$size运算符。传递给$ size的值必须解析为数组:

$ size的参数必须解析为数组。如果争论 $ size丢失或不解决数组,$ size错误。

也值得注意的是,错误是在说but was of type: missing,因为您的文档中的字段具有不同的名称(somefield(,即聚合(someField(,这意味着汇总对$size运算符无关。

相关内容

最新更新