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

文档