Node / Mongoose – 如果数组在更新期间不存在,则无法在数组中创build对象
所有。 这从昨天起一直困扰我,任何帮助将不胜感激。 我的用户模型有其他模型的数组,如下所示:
var userSchema = new Schema({ addresses : [{ type: mongoose.Schema.Types.ObjectId, ref: 'Address' }]
现在,在我的控制器中运行更新函数时,我想更新一个对象,如果它已经存在于数组中,或者创build一个新的,如果它不是。 我是,在地址的实例中,使用模型中的addressType属性来检查地址是否已经存在于数组中。
在我的usersController:创buildfunction:
function createAddress(req, res){ User.findOne({ user_id: req.params.id}, function(err, user){ Address.create(req.body, function(err, address){ user.addresses.push(address) }) })
}
这里是更新函数的一个片段:
function updateUser (req, res) { console.log("updating user in back end") User.findOneAndUpdate({user_id: req.params.id}, req.body, function(err, user){ if(err) throw err Address.findOne({address_id: req.params.id}, req.body, function(err, address){ if(err) throw err if({addressType: req.params.id} != req.body.addressType){ createAddress(req); } else { Address.findOneAndUpdate({address_id: req.params.id}, req.body, function(err, address){ if(err) throw err }) }
它似乎可以工作,但每次我运行它,即使我通过邮递员发送完全相同的信息,我在数据库中得到一个新的对象。 任何帮助将不胜感激,我感谢您提前为您的时间。
if({addressType: req.params.id} != req.body.addressType)
你比较对象与string。 这总是not equals
。
if (address) { update(); } else { create(); }
最好是使用upsert
选项:
Address.findOneAndUpdate({address_id: req.params.id}, req.body, { upsert: true }, callback);
文档