我试图从传递的对象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();
});
答案 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})