我在 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")
}
}
}
任何关于可能发生的事情的线索?
答案 0 :(得分:0)
https://docs.mongodb.com/manual/reference/operator/query/nor/ 是表达式级运算符,例如您可以将它放在查询的顶层以组合子句。它未定义为字段级运算符。
对于您的查询,请使用 https://docs.mongodb.com/manual/reference/operator/query/nin/。
您的查询的其余部分看起来也有问题,因为您可能应该对嵌套字段的条件使用点表示法,而不是像您所做的那样在查询中嵌套字段。