猫鼬:MongoError:尝试投影$ elemMatch时> 1个字段

时间:2018-08-22 02:47:26

标签: mongodb mongoose

我试图在更新的版本中仅投影出数组中匹配的元素。但是我遇到了错误:“ MongoError:> obj中的1个字段:{_id:0,lotes。$:1}”

如果我删除“ new:true”,它将起作用。但是后来我有了更新之前的文档。我真的很想要更新的版本。

怎么了?我该如何解决?

要约文档类似于:

Copy Local

Serie结构类似于:

 {
      _id
      series: [ Serie ]
    }

我正在使用猫鼬:

{
  _id
  public.available: Number
  public.expDate: Date
}

2 个答案:

答案 0 :(得分:1)

正如安东尼·温兹莱特(Anthony Winzlet)在链接中指出的那样,猫鼬似乎存在一个问题,如果您使用“ new:true”,则无法投影$ elemMatch。

所以我的解决方案是仅使用“ new:true”,而不进行任何预测。并稍后减少数组以获取$ elemMatch:

.then( (result) => {
  var aux = result.series.reduce((acu, serie, index) => {
    if (serie._id == req.params.serieId) return index;
  });
  var element = result.series[aux];
}

答案 1 :(得分:0)

对于其他遇到此错误的人,这也是尝试执行非法操作(例如尝试在findOne请求中更新数据库元素)时最常见的错误。

确保您的请求正确无误,例如findOneAndUpdate应该是您在收到此错误时的第一个呼叫端口。