如何使用MongoDB显示“ NAME”创建的

时间:2018-09-10 06:37:52

标签: node.js database mongodb nosql timestamp

我是MongoDB的新手,所以我想知道是否有任何方法可以显示XYZ用户创建或修改的名称?我希望它在我的应用程序中显示创建或修改内容的名称。

1 个答案:

答案 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

这些操作是将预保存的挂钩添加到您的文档中,并在这些挂钩中跟踪审核数据。因此,您可以使用已完成的操作,也可以查看这些程序包的功能并尝试复制功能-如果这是一个业余项目,并且您想了解其工作原理,那就更好了。

现在,您如何在前端显示此信息可能对一个新问题很有帮助,因为您没有指定有关所使用的任何软件/软件包的信息。