MongoDB:未知运算符:$或

时间:2018-01-30 20:38:10

标签: javascript mongodb

我试图对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)

3 个答案:

答案 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": [] }
  ]
}