用于更新的Moongoose模式用法

时间:2016-07-07 15:29:38

标签: node.js mongodb

这是我的架构

var DrivingSchema = new Schema({
  title: { type: String, required: true },
  permalink: {type: String, required: true},
  phone: {type: Number, required: true},
  mobile: {type: Number},
  bike: {type: Boolean, default: false }    
});

我使用此架构添加数据。它工作正常。

但是当我必须更新数据时,我无法使用此架构,因为它提供了新的_id。这是我的更新控制器。

DriveModel.findOne({permalink: permalink}, function(err, data) {
        if (err)
            res.send(err);
        var newData = new DriveModel({
            title: title,
            phone: phone,
            mobile: mobile,
            bike: bike});
        DriveModel.update({_id:data._id}, newData, function(err, result) {
            if (err)
                res.send(err);
            else{res.redirect('/centres/'+permalink);}                
        });
});

由于_id冲突,此控制器无法正常工作。 Mongoose Schema documentation建议在架构中使用_id: false,但它再次适用于更新而不是新插入的数据。现在,我该如何解决这个问题?我是否必须构建另一个仅用于更新的模式,或者无论如何都要处理相同的模式?

1 个答案:

答案 0 :(得分:0)

试试这个:

   var elements = {"title": title, "phone": phone, "mobile": mobile, "bike": bike};

    DriveModel.findOne({"permalink": permalink}, function(err, data) {
        if (err) {
            res.end(err);
        }

        for(elem in elements) {
            data[elem] = elements[elem];
        }

        data.save(function(err, place) {
            if(err) {
                res.end(err);
            } else {
                res.redirect('/centres/'+permalink);
            }
        });

    });