use*_*695 8 javascript mongodb
我正在尝试对 mongoDB 执行简单或查询,但确实收到错误MongoError: unknown operator: $or
有人可以解释我做错了什么吗?
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)
Run Code Online (Sandbox Code Playgroud)
小智 6
尝试这个:
query = {
$or: [
{
category: { $exists: false }
},
{
category:[]
}
]
}
Run Code Online (Sandbox Code Playgroud)
简短的回答是该$or语句不适用于单个字段,而是必须为每个项目指定字段:
$or: [
{category: {$exists: false}},
{category: {$eq: []}}
]
Run Code Online (Sandbox Code Playgroud)
根据手册,$or语法如下:
Run Code Online (Sandbox Code Playgroud){ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }
请注意,与许多运算符不同,它不包含字段名称。例如,对比度$exists,它确实包含字段名称:
Run Code Online (Sandbox Code Playgroud){ field: { $exists: <boolean> } }
换句话说,而不是:
{
title: { $exists: true },
category: {
$or: [
{$exists: false},
{$eq: []}
]
}
}
Run Code Online (Sandbox Code Playgroud)
你需要:
{
title: { $exists: true },
$or: [
{category: {$exists: false}},
{category: {$eq: []}}
]
}
Run Code Online (Sandbox Code Playgroud)
将所有内容与您的确切示例放在一起,您最终会得到:
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)
Run Code Online (Sandbox Code Playgroud)