【问题标题】:Updating mongo document after it's been found找到后更新 mongo 文档
【发布时间】:2018-06-19 00:51:09
【问题描述】:

我正在尝试从传递的对象 ID 数组中更新多个文档。我希望能够通过将用户 ID 推送到访问者数组来更新每个文档。 我收到此错误 CastError: Cast to ObjectId failed for value。请参阅下面的代码

var estates = req.params.estates.split(',');
 Estate.findByIdAndUpdate({ _id: { $in: estates } }).then(function(Estate)
{
   Estate.visitors.push(mongoose.Types.ObjectId( req.params.userid));
   Estate.save();
});

【问题讨论】:

    标签: mongodb mongoose objectid


    【解决方案1】:

    您的 API 使用错误,findByIdAndUpdate 的第一个参数应该是 id,它无法将数组转换为 id。

    用于匹配和更新多个文档,

    你需要使用updateMany

    db.foo.updateMany({"_id" : { $in : [1,2,3] }},{$push : {test: 2}},{$upsert : false})
    

    updatemulti : true 选项

    db.store.update({"_id" : { $in : [1,2,3] }},{$push : {test: 2}},{$upsert : false, multi : true})
    

    输出

    { "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 0 }
    

    猫鼬

    Estate.update({ _id: { $in: estates } }, {$push : {visitors : req.params.userid}}, {multi : true, upsert : false})
    

    Doc findByIdAndUpdate

    【讨论】:

      【解决方案2】:

      根据mongoose documentationsfindByIdAndUpdate,第一个参数是id,您传递的是object

      尝试用findOne({ _id: { $in: estates } })替换它

      【讨论】:

      • 效果很好,感谢您的帮助。我最终将它与 map 结合使用以循环数组过去以查找和更新每个文档。
      猜你喜欢
      • 2021-04-23
      • 2011-05-21
      • 1970-01-01
      • 2018-12-22
      • 1970-01-01
      • 2022-06-17
      • 1970-01-01
      • 1970-01-01
      • 2015-11-18
      相关资源
      最近更新 更多