找到后更新mongo文档

时间:2018-01-09 22:19:14

标签: mongodb mongoose objectid

我试图从传递的对象ID数组中更新许多文档。我希望能够通过将用户标识推送到访问者数组来更新每个文档。   我收到此错误CastError:强制转换为ObjectId失败。看下面的代码

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();
});

2 个答案:

答案 0 :(得分:0)

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

尝试将其替换为findOne({ _id: { $in: estates } })

答案 1 :(得分:0)

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

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

您需要使用updateMany

db.foo.updateMany({"_id" : { $in : [1,2,3] }},{$push : {test: 2}},{$upsert : false})
带有update选项的

multi : 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