Database MongoDB 4.4:$filter的输入必须是一个不长的数组
我已经在MongoDB 4.4.2中实现了以下聚合,它运行良好:Database MongoDB 4.4:$filter的输入必须是一个不长的数组,database,mongodb,Database,Mongodb,我已经在MongoDB 4.4.2中实现了以下聚合,它运行良好: [{ $match: { "$expr": { "$and": [{ "$not": "$history_to" }, ], }, } }, { $unwind: { "path"
[{
$match: {
"$expr": {
"$and": [{
"$not": "$history_to"
}, ],
},
}
}, {
$unwind: {
"path": "$used",
"preserveNullAndEmptyArrays": true,
}
}, {
$project: {
"ticket": "$$ROOT",
"status": {
"$map": {
"input": {
"$filter": {
"input": "$status",
"as": "cstatus",
"cond": {
"$not": "$$cstatus.history_to",
},
},
},
"as": "status",
"in": "$$status.value",
},
},
}
}]
但是当我在MongoDB 4.4.4中尝试它时,我遇到,$filter的输入必须是一个不长的数组
如果有什么帮助的话,我想这个错误的原因与:
"cond": {
"$not": "$$cstatus.history_to",
},
因为当我评论$not
时,它工作得很好;起初我认为,$not
可能不再受支持了,但它是受支持的,所以我没有主意了
一些示例文档
根据您可以检查的示例文档,您的查询看起来不错 但是当我在MongoDB 4.4.4中尝试它时,我遇到
$filter
的输入必须是一个不长的数组
这不是任何MongoDB版本特定的问题,错误表明,$filter
中输入的提供字段状态
不是数组类型,而是长类型,$filter
输入应该是数组类型
在status
字段中肯定有一些文档具有非数组值
如果要检查是否可以在$filter
操作之前匹配条件
{ $match: { status: { $type: "array" } } } // 4 = "array"
这将按
状态
筛选文档,它应该是数组类型。$status
字段不是数组,只需确认它应该是数组,如果您发布一些示例文档,它会更容易。@Turivishill对不起,我不太明白您的意思……您说状态
应该是数组?我将尝试添加一些示例文档。是的状态字段应该是一个数组。@Turivshal OK,谢谢,我会研究一下……但为什么它在4.4.2版本中工作,而在4.4.4中不工作?我不认为这是版本特定的错误,只是读取的输入值应该是一个数组。
{ $match: { status: { $type: "array" } } } // 4 = "array"