【问题标题】:How do i tell Mongoose NOT to save a field?我如何告诉猫鼬不要保存字段?
【发布时间】:2017-03-14 02:12:22
【问题描述】:

如果 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 架构

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

一个解释(如果你问我为什么需要这个)
我对new personedit person 使用相同的html 模板。当我创建一个新人时,如果我将 age 字段留空,Mongoose 将只保存 name 字段。但是当我使用编辑模板时,即使该字段为空,Mongoose 也会始终将age 字段设置为null。我想不出任何办法来阻止这一切。

【问题讨论】:

    标签: javascript mongodb express mongoose


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      @Aioros,你的回答给了我一个想法,但是我发现这个解决方案符合我的问题。我只是在将它们发送到 Mongoose 之前删除 null 或未定义的 object 元素。

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

      【讨论】:

        猜你喜欢
        • 2019-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-14
        • 2013-01-25
        • 2018-11-29
        • 1970-01-01
        • 2016-05-05
        相关资源
        最近更新 更多