Mongo错误-无法规范化查询:BadValue不支持的投影选项

时间:2019-06-19 14:23:54

标签: arrays mongodb mongodb-query

我是MongoDB的新手,正在尝试执行查询。我有一个公司集合和公司ID数组。我想获得attributes.0.ccode存在且attributes.0.ccode不为空的结果,并将在数组(cdata)提供的ID中进行检查

var query = Company.find({ _id: { $in: cdata } },{ "attributes.0.ccode": { $exists: true }, $and: [ { "attributes.0.ccode": { $ne: "" } } ] }).select({"attributes": 1}).sort({});

我得到的错误是

"$err": "Can't canonicalize query: BadValue Unsupported projection option: attributes.0.ccode: { $exists: true }",
"code": 17287

我认为这是一个包围问题,但无法弄清楚何处。

我们非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

在您的代码中,{ _id: { $in: cdata } }被解释为查询,其他所有内容都从,{ "attributes.0.ccode": { $e..开始作为一个Projection(要显示的字段)。尝试重构代码,以使_id: {$in ...}和查询的其余部分属于同一个更高级别的对象。像这样:

var query = Company.find({
  _id: {
    $in: cdata
  },
  "attributes.0.ccode": {
    $exists: true
  },
  $and: [
    {
      "attributes.0.ccode": {
        $ne: ""
      }
    }
  ]
}).select({"attributes": 1}).sort({});