Javascript 我如何告诉猫鼬不要保存一块地?
如果Javascript 我如何告诉猫鼬不要保存一块地?,javascript,mongodb,express,mongoose,Javascript,Mongodb,Express,Mongoose,如果age字段为空或未定义,如何告诉Mongoosenot保存该字段 或者我可以在Express中这样做吗 Express router.put('/edit/:id', function(req, res) { Person.findOneAndUpdate({ _id: req.params.id }, { name: req.body.updateData.name, age: req.body.updateData.age }, {
age
字段为空或未定义,如何告诉Mongoosenot保存该字段
或者我可以在Express中这样做吗
Express
router.put('/edit/:id', function(req, res) {
Person.findOneAndUpdate({ _id: req.params.id }, {
name: req.body.updateData.name,
age: req.body.updateData.age
}, { new: true });
})
猫鼬模式
var PersonSchema = new Schema({
name: { type: String},
age: {type: String}
})
解释(如果你问我为什么需要这个)我对
新人
和编辑人
使用相同的html模板。当我创建一个新人时,如果我将年龄字段留空,Mongoose将只保存姓名字段。但是当我使用编辑模板时,Mongoose总是将age
字段设置为null,即使该字段为空。我想不出任何方法来阻止此操作。您可以在数据库更新之前管理请求数据,如:
router.put('/edit/:id', function(req, res) {
let update = {name: req.body.updateData.name};
if (req.body.updateData.age != "") {
update.age = req.body.updateData.age;
}
Person.findOneAndUpdate({ _id: req.params.id }, update, { new: true });
})
@Aioros,你的回答给了我一个想法,但是我找到了这个解决方案来解决我的问题。我只是在将空的或未定义的对象元素发送到Mongoose之前删除它们。
let update = {
name: req.body.updateData.name,
age: req.body.updateData.age
};
if (update.age === null || update.age === undefined) delete update.age
Person.findOneAndUpdate({ _id: req.params.id }, update, { new: true });