它将更新除数组中的值之外的所有值,它不会那样做。
这是我的更新
exports.update = function(req, res) {
if (req.body._id) {
delete req.body._id;
}
plan.findById(req.params.id, function(err, plan) {
if (err) {
return handleError(res, err);
}
if (!plan) {
return res.send(404);
}
var updated = _.merge(plan, req.body);
updated.save(function(err) {
if (err) {
return handleError(res, err);
}
return res.json(200, plan);
});
});
};
这是我的架构
var ContactSchema = new Schema({
location: {
type: String,
required: true
},
total_cost: {
type: Number,
required: true
},
detailed_expenses: {
transport: {
type: String,
required: true,
trim: true
},
Hotel: {
type: Number,
required: true,
trim: true
},
Food: {
type: Number,
required: true,
trim: true
},
Attractions: {
type: Number,
required: true,
trim: true
}
},
holiday_type: {
type: String,
required: true
},
transport_type: {
type: String,
required: true
},
updated: {
type: Date,
default: Date.now
}
});
答案 0 :(得分:1)
var updated = _.merge(plan, req.body);
因为updated
是简单对象而不是ContactSchema
的实例,因此它不包含save
函数。因此,您需要使用ContactSchema
创建updated
的实例,然后才能使用save
函数。以下是您的更新代码。
exports.update = function(req, res) {
if (req.body._id) {
delete req.body._id;
}
plan.findById(req.params.id, function(err, plan) {
if (err) {
return handleError(res, err);
}
if (!plan) {
return res.send(404);
}
var updated = new plan(req.body); //if req.body is document to be saved
updated.save(function(err) {
if (err) {
return handleError(res, err);
}
return res.json(200, plan);
});
});
};