Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database MongoDB 4.4:$filter的输入必须是一个不长的数组_Database_Mongodb - Fatal编程技术网

Database MongoDB 4.4:$filter的输入必须是一个不长的数组

Database MongoDB 4.4:$filter的输入必须是一个不长的数组,database,mongodb,Database,Mongodb,我已经在MongoDB 4.4.2中实现了以下聚合,它运行良好: [{ $match: { "$expr": { "$and": [{ "$not": "$history_to" }, ], }, } }, { $unwind: { "path"

我已经在MongoDB 4.4.2中实现了以下聚合,它运行良好:

[{
    $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"