我试图对mongoDB进行简单或查询,但我确实收到了错误 MongoError:unknown operator:$或
有人可以解释我做错了吗?
const query = {
title: { $exists: true },
category: { $exists: true, $ne: [] }
}
// ...do some stuff
// now need to change category query...
query.category = {
$or: [
{ $exists: false },
{ $eq: [] }
]
}
// should return documents with missing category field or empty array value
Content.find(query)
答案 0 :(得分:4)
简短的回答是 $or
语句不适用于单个字段,而是必须为每个项目指定字段:
$or: [
{category: {$exists: false}},
{category: {$eq: []}}
]
对于 the manual,$or
语法如下:
{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }
请注意,与许多运算符不同,它不包含字段名称。例如,对比 $exists
,它确实包含字段名称:
{ field: { $exists: <boolean> } }
换句话说,而不是:
{
title: { $exists: true },
category: {
$or: [
{$exists: false},
{$eq: []}
]
}
}
你需要:
{
title: { $exists: true },
$or: [
{category: {$exists: false}},
{category: {$eq: []}}
]
}
将所有内容与您的确切示例放在一起,您最终会得到:
const query = {
title: { $exists: true },
category: { $exists: true, $ne: [] }
}
// ...do some stuff
// now need to change category query...
delete query.category
query.$or = [
{category: {$exists: false}},
{category: {$eq: []}}
]
// should return documents with missing category field or empty array value
Content.find(query)
答案 1 :(得分:0)
尝试一下:
query = {
$or: [
{
category: { $exists: false }
},
{
category:[]
}
]
}
答案 2 :(得分:-2)
我没有方便的方法来测试你,但尝试添加这样的引号:
query.category = {
"$or": [
{ "$exists": false },
{ "$eq": [] }
]
}