Mongo shell 聚合管道错误:“未知运算符:$nor”

时间:2021-04-15 10:45:47

标签: database mongodb aggregation-framework

我在 this 课程之后第一次在 Mongo Shell 上尝试聚合管道。这个想法是创建一个具有多个条件的搜索查询,并在 $match 聚合阶段使用它。

我的方法是单独编写条件并将它们组合在这样的对象中:

let fullQuery = {
   "languagesQuery" : {
                "languages" : {
                        "$all" : [
                                "English",
                                "Japanese"
                        ]
                }
        },
        "genresQuery" : {
                "$nor" : [
                        {
                                "genres" : "Crime"
                        },
                        {
                                "genres" : "Horror"
                        }
                ]
        },
        "imdbRatingQuery" : {
                "imdb.rating" : {
                        "$gte" : 7
                }
        },
        "ratedQuery" : {
                "rated" : {
                        "$in" : [
                                "PG",
                                "G"
                        ]
                }
        }

}

问题是,虽然单独所有查询似乎都可以正常工作,但当我运行管道甚至 db.movies.find(fullQuery) 时,我收到以下错误:

Error: error: {
        "operationTime" : Timestamp(1618483194, 1),
        "ok" : 0,
        "errmsg" : "unknown operator: $nor",
        "code" : 2,
        "codeName" : "BadValue",
        "$clusterTime" : {
                "clusterTime" : Timestamp(1618483194, 1),
                "signature" : {
                        "hash" : BinData(0,"LPVJIin4JoThWZbFICVnzHOnJKU="),
                        "keyId" : NumberLong("6902062171803353090")
                }
        }
}

任何关于可能发生的事情的线索?

1 个答案:

答案 0 :(得分:0)

https://docs.mongodb.com/manual/reference/operator/query/nor/ 是表达式级运算符,例如您可以将它放在查询的顶层以组合子句。它未定义为字段级运算符。

对于您的查询,请使用 https://docs.mongodb.com/manual/reference/operator/query/nin/

您的查询的其余部分看起来也有问题,因为您可能应该对嵌套字段的条件使用点表示法,而不是像您所做的那样在查询中嵌套字段。