【发布时间】:2019-01-02 17:45:54
【问题描述】:
您好,我正在寻找一种方法,使用 node.js 和 express 将新字段从服务器端动态插入到现有的 mongoDB 文档中。
例如在本地 mongoDB 中,文档如下所示。
{
value: 'Google',
url: 'https://google.com',
env: 'Test'
}
我有一个路由,它已经从 UI 上的表单更新了当前文档字段。但是,我想将该逻辑与在更新时插入新字段的能力相结合。
下面的路由处理使用现有字段更新文档。
router.put("/:id", (req, res) => {
let value = req.body.value;
Application.findByIdAndUpdate(req.params.id, req.body.application, (err,
updatedApp) => {
if(err){
console.log(err);
} else {
console.log(updatedApp)
req.flash("info", updatedApp.value + " " + "successfully edited!");
res.redirect("/qa-hub/applicationmanager");
}
});
});
在前端,我使用带有表单的 EJS 来更新文档。示例如下:
<div class="row">
<div class="col-md-6">
<div class="form-group">
<input class="form-control" type="url" name="application[url]" value="<%= application.url %>" required>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<select class="form-control" name="application[env]" required="true">
<option class="text-center" value='<%= application.env %>'><%= application.env %></option>
<option value='Beta'>Beta</option>
<option value='Dev'>Dev</option>
<option value='Does Not Apply'>Does Not Apply</option>
<option value='Prod'>Prod</option>
<option value='QA'>QA</option>
<option value="Test">Test</option>
</select>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<a class="btn btn-outline-warning" href="/qa-hub/applicationmanager">Cancel</a>
</div>
<div class="form-group">
<button class="btn btn-outline-primary" id="btn" >Update</button>
但是,我想在提交表单时添加三个附加字段。我想捕获执行编辑的当前登录用户以及日期和时间。我已经解决了这个问题,但是如何实现从 route.put 将新数据插入到现有文档中,同时在进行任何更改时保持更新当前字段的逻辑。
因此,在用户进行一些更改并更新三个字段后,文档将如下所示,除了 id 处理获取当前登录用户当时和日期/时间并将其传递的逻辑,但对于下面的示例我将对其进行硬编码。:
{
value: 'Google',
url: 'https://google.com',
env: 'Test',
updatedBy: "Test User"
timeUpdated: "12:54",
dateUpdated: "7/25/2018"
}
所以最终我想保留更改日志,然后将其添加到 UI。
【问题讨论】: