我怎么告诉Mongoose不要保存一个字段?

时间:2017-03-13 16:17:58

标签: javascript mongodb express mongoose

如果age字段为null或未定义,我如何告诉Mongoose 保存? 或者我能以某种方式在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 });
})

Mongoose Schema

var PersonSchema = new Schema({
    name: { type: String},
    age: {type: String}
})

探索(如果你问为什么我需要这个)
我为new personedit person使用了相同的html模板。当我创建一个新人时,如果我将name字段留空,Mongoose将仅保存age字段。但是当我使用编辑模板时,即使字段为空,Mongoose也会始终将age字段设置为 null 。我无法想到任何阻止它的事情。

2 个答案:

答案 0 :(得分:0)

您可以在数据库更新之前管理您的请求数据,例如:

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

答案 1 :(得分:0)

@Aioros,你回答给了我一个想法,但是我发现这个解决方案符合我的问题。我只是删除 null或未定义的对象元素,然后才发送给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 });