node.js - 更新模型实例

标签 node.js mongodb mongoose

我想了解使用 mongoose 更新模型实例的正确方法是什么,即:

拥有:

User = {
   username: {
      type: String,
      indexed: true
   },
   email: {
      type: String,
      indexed: true
   },
   name: String,
   .........
};

我通过 ajax 将整个表单发送到 Controller 。
到目前为止,我知道有两种选择:

app.put('/users/', function(req, res){
   var id = ObjectId(req.body._id);
   User.findOne({_id: id}, function(err, user){
       user.name = req.body.name;
       ....
       ....
       user.save();
   });
});

或者:

app.put('/users/', function(req, res){
    var id = ObjectId(req.body._id);
    delete req.body._id
    User.update({_id: id}, req.body, function(err){
         .....
    };
});

两种方式都有缺点:
在第一种方法中,我必须逐个映射所有属性;
在第二种方法中,我必须删除所有无法更改的属性;
还有第三种可能的方法,可以让我从客户端发送仅更改的属性,但我认为这会很麻烦。

有没有一种我没有看到的好的、标准化的方法来做到这一点?

谢谢

最佳答案

这是我通常使用的方法,它涉及一个名为 mongoose-mass-assignment 的小型 npm 包:

https://github.com/bhelx/mongoose-mass-assignment

这些文档非常不言自明,易于使用。它基本上会为您执行删除操作。因此,您将 protected:true 添加到模型中,然后它会为您删除这些属性。我喜欢这种方法,因为它仍然允许我按原样使用 req.body。您也可以使用它进行更新和插入。

关于node.js - 更新模型实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14986185/

相关文章:

mongodb - 如何使用golang将数组对象数据转换为字符串格式数据?

javascript - 如何以编程方式填充 Mongoose 模型字段?

node.js - Mongoose - 使用 `CastError: Cast to number failed` 时为 "$fieldName"

node.js - 将缓冲区作为真实图像发送

javascript - nodejs中的并发模型

java - OData 服务器 API 和表达式语法、文字和成员

javascript - Node.js:使用 Mongoose 的 find() 问题

node.js - .htaccess 路由到 Node App

javascript - NodeJS 更新 API - 内部服务器错误

mongodb - $filter 嵌套级别与 $or、$gte、$lte 运算符