如何将表单字段映射到数据库对象

时间:2017-08-05 19:35:10

标签: html node.js mongodb forms express

我想知道这些编辑表单是如何使用像mongo db这样的现代框架构建的。

为了澄清这个问题,我想构建一个允许编辑存储在Mongo中的对象的一些字段的应用程序。每个“表单提交”都应创建一个新的对象实例,只更改编辑的字段。

填充表单时,很容易检索整个对象,并仅在应用程序的视图部分生成相关字段。

但是当保存表单时,要么需要再次检索对象,然后“手动”将每个表单字段映射到对象中的字段,最后将新对象保存到数据库中,或者事先存储所有字段表单中的对象作为隐藏字段并进行一些序列化。

由于这可能是一种常见的做法,而这两种方法都缺乏,我怀疑有更好的技术可用。

2 个答案:

答案 0 :(得分:0)

看看Mongoose

  

Mongoose提供了一种直接的,基于模式的解决方案来为您的应用程序数据建模。它包括内置类型转换,验证,查询构建,业务逻辑挂钩等,开箱即用。

您可以创建Mongoose模型,如下所述:http://mongoosejs.com/docs/models.html

例如,

var schema = new mongoose.Schema({ name: 'string', size: 'string' });
var Shirt = mongoose.model('Shirt', schema);

然后,您可以通过仅提供新更新的参数来更新 Shirt 文档实例,如下所述:http://mongoosejs.com/docs/api.html#model_Model.update

例如,

Shirt.update({ name: 'New Name' }, { size: 'small' }, 
  function (err, raw) { 
    if (err) return handleError(err);
    console.log('The raw response from Mongo was ', raw);
  }
);

答案 1 :(得分:0)

您可以发送"稀疏"对Mongo的更新,只发送几个字段;您不需要重新保存整个文档。为此,您需要跟踪哪些字段已更改;也被称为"脏"字段。

在传统的请求 - 响应往返中,这有点难以实现,因为一切都是无状态的。

一种解决方案是编写一个小的前端脚本,在脚本中监听更改,并将这些字段名称列表保存到<input type="hidden">。然后在您的快速应用程序中,检查该隐藏字段。如果存在,则仅处理这些字段。如果它不存在,请重新保存整个文档。