Как показать Создано "NAME", используя MongoDB - PullRequest
0 голосов
/ 10 сентября 2018

Я новичок в MongoDB, поэтому мне было интересно, есть ли способ показать имя созданного или измененного пользователем XYZ? Я хочу, чтобы в моем приложении отображалось имя того, кто что-то создал или изменил.

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Вы должны учитывать эту информацию при структурировании вашей модели данных. Например. Допустим, вы пишете сообщения в коллекцию 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 };

Вы используете это так, т.е. в вашем контроллере API / posts:

// ... 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) на тех, кто изменил данные. Или, может быть, больше информации.

Но разумнее и проще было бы использовать что-то вроде mongoose для обработки ваших данных, а затем использовать плагин, который делает все это автоматически. Примерно так: https://github.com/taptaptech/mongoose-audit.

Вы можете посмотреть что-то похожее на npm: https://www.npmjs.com/search?q=mongoose%20audit.

Что они делают, так это добавляют предварительно сохраненные хуки в ваши документы, и в этих хуках отслеживаются данные аудита. Таким образом, вы можете использовать что-то готовое, или вы можете посмотреть, что делают эти пакеты, и попытаться воспроизвести функциональность - лучше, если это хобби-проект, и вы хотите узнать, как все работает.

Теперь то, как вы показываете эту информацию в своем веб-интерфейсе, вероятно, подходит для нового вопроса, поскольку вы не указываете информацию о каком-либо программном обеспечении / пакетах, которые вы используете.

0 голосов
/ 10 сентября 2018

Вы должны просто записать это в свою базу данных при редактировании / создании, для этого нет встроенной функциональности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...