所有。自昨天以来,这一直困扰着我,任何帮助都将不胜感激。我的用户模型包含其他模型的数组,如下所示:
var userSchema = new Schema({
addresses : [{ type: mongoose.Schema.Types.ObjectId,
ref: 'Address'
}]
现在,在我的控制器中运行更新功能时,我想更新一个对象(如果它已经存在于数组中),或者创建一个新对象(如果不存在)。在地址的实例中,我使用模型中的addressType属性来检查并查看数组中是否已存在该地址。
在我的usersController中: 创建功能:
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
})
}
似乎它会起作用,但每次运行它时,我都会在数据库中获得一个新对象,即使我通过邮递员发送完全相同的信息。非常感谢任何帮助,我提前感谢您的时间。
答案 0 :(得分:2)
if({addressType: req.params.id} != req.body.addressType)
您将对象与字符串进行比较。它总是not equals
。
if (address) {
update();
} else {
create();
}
最好使用upsert
选项:
Address.findOneAndUpdate({address_id: req.params.id}, req.body, {
upsert: true
}, callback);