我正在尝试在mongodb记录上创建事件日志类型的字段,我可以在其中存储活动列表。我第一次运行该函数时,它会正确地追加到数组,但随后的调用会覆盖最后一个条目,而不是追加。如果重新启动服务器或刷新浏览器中的页面,它将再次追加并重复相同的行为。 我正在学习node和javascript,所以我确定这是我犯的一些错误,但我似乎无法弄清楚。
客户端上的Javascript是制表符事件。
cellEdited:function(cell){
//cell - cell component
const oldValue = cell.cell.oldValue;
const newValue = cell.cell.value;
const title = cell.cell.column.definition.title;
var report = cell.cell.row.data;
report.event = `Updated ${title} from ${oldValue} to ${newValue}`;
$.ajax({
type: 'POST',
url: '/api/update',
data: report,
dataType: 'json'
});
}
其在服务器上调用的路由:
app.post('/api/update', isAuthenticated, function(req, res) {
var report = req.body;
var reason = '';
if (typeof report.event !== 'undefined') {
reason = report.event;
delete report.event;
} else {
reason = 'Report updated';
}
db.DamageReport.findOneAndUpdate({ _id: report._id}, report, function (err, doc) {
if (err) {
console.log('Err updating report ', err);
return res.send(500, { error: err});
}
/*
* Write eventlog
*/
var event = {"date": new Date(), "user": req.user.email, "event": reason };
appendLog(doc._id, event);
return res.json(doc);
});
});
appendLog函数:
function appendLog(id, entry) {
/*
* entry format:
* date: Date
* user: String
* event: String
*/
if (typeof(entry.date) !== 'object') {
entry.date = new Date();
}
db.DamageReport.findByIdAndUpdate(id, {$push: {eventLog: entry}}, function(err, result) {
if (err) {
return console.log('Error writing eventLog: ', err);
}
return(result);
});
}
答案 0 :(得分:0)
它不会追加多个,因为先前的保存以原始形式包含Eventlog数组,因此,每次保存时,它都会将其设置回原始数组,然后附加上一次更新。