我是MongoDB的新手,所以我想知道是否有任何方法可以显示XYZ用户创建或修改的名称?我希望它在我的应用程序中显示创建或修改内容的名称。
答案 0 :(得分:1)
在构造数据模型时,您需要考虑此信息。例如。假设您正在将帖子写到posts
集合中,并想从authors
集合中添加帖子作者。
现在,最简单的方法是将这些数据直接嵌入到post
文档中。例如。对于创建数据,我们使用insert,如下所示:
// posts.service.js
function save(postData, userData) {
// We return a Promise here
return db.posts.insert({
title: postData.title,
text: postData.text,
published: true,
// now comes your audit data
createdBy: user.username,
createdAt: new Date().toISOString(),
});
}
module.exports = { save };
您可以像这样使用它。在您的/ posts API控制器中:
// ... other stuff then:
const postsService = require('./posts.service');
route.post('/posts', function(req, res, next) {
postsService.save({
title: req.body.title,
text: req.body.text,
}, req.user)
// Handle response and error.
.then(response => res.json(response))
.catch(error => next(error));
要更新帖子,您可以将其添加到posts.service.js
(使用update):
// posts.service
// ...after your *save* function above
function update(postId, postData, userData) {
return db.posts.update({
id: postId,
}{
title: postData.title,
text: postData.text,
published: true,
// now comes your audit data
modifiedBy: user.username,
modifiedAt: new Date().toISOString(),
});
}
// update module exports:
module.exports = { save, update };
现在,在您的控制器上,添加处理更新的路由:
// ... after the creation route
route.put('/posts/:postId', function(req, res, next) {
postsService.update(req.params.postId, {
title: req.body.title,
text: req.body.text,
}, req.user)
// Handle response and error.
.then(response => res.json(response))
.catch(error => next(error));
现在,执行此操作的其他方法可能意味着您仅包括修改数据的对象的引用(ObjectId)。或更多信息。
但是,更聪明,更轻松的方法是使用猫鼬之类的东西来处理您的数据,然后使用一个插件来自动完成所有这些工作。像这样的东西:https://github.com/taptaptech/mongoose-audit。
您可以在npm查找类似的内容:https://www.npmjs.com/search?q=mongoose%20audit。
这些操作是将预保存的挂钩添加到您的文档中,并在这些挂钩中跟踪审核数据。因此,您可以使用已完成的操作,也可以查看这些程序包的功能并尝试复制功能-如果这是一个业余项目,并且您想了解其工作原理,那就更好了。
现在,您如何在前端显示此信息可能对一个新问题很有帮助,因为您没有指定有关所使用的任何软件/软件包的信息。