MongoDB:未知运算符:$or

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)


M. *_*tin 6

简短的回答是该$or语句不适用于单个字段,而是必须为每个项目指定字段:

$or: [
  {category: {$exists: false}},
  {category: {$eq: []}}
]
Run Code Online (Sandbox Code Playgroud)

解释

根据手册$or语法如下:

{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }
Run Code Online (Sandbox Code Playgroud)

请注意,与许多运算符不同,它不包含字段名称。例如,对比度$exists,它确实包含字段名称:

{ field: { $exists: <boolean> } }
Run Code Online (Sandbox Code Playgroud)

换句话说,而不是:

{
  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)