我在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"
}
我确定存在两个以上元素的数组。
我很好奇为什么会出现此错误。作为记录,我有一种在“ coll.find”查询中使用$ where的解决方法。
答案 0 :(得分:0)
由于第一阶段正在将非数组字段(someField
)传递给$size
运算符,因此聚合返回错误。传递给$ size must resolve to an array的值:
$ size的参数必须解析为数组。如果参数为 $ size丢失或无法解析为数组,$ size错误。
还值得注意的是,错误是说but was of type: missing
,因为文档中的字段具有与集合(somefield
)不同的名称(someField
),这意味着该集合没有将任何值传递给$size
运算符。