Как показать создано "name" с помощью mongodb

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

Это может быть лучший вопрос, если вы включите в него больше информации. Будьте как можно более конкретными. Например. «Я сохраняю posts в коллекции MongoDB posts, в которую входят title и text. Я получаю их в конечной точке / api / posts в моем приложении Angular. Как я могу добавить данные аудита в свою коллекцию - кто создал или изменил ее и когда. Я также хотел бы показать эту информацию на веб-интерфейсе. ». Кроме того, если вы разделите вопрос на эти части (1. как сохранить и получить эту информацию из БД, и 2. как отобразить такую ​​информацию), ваши вопросы с большей вероятностью получат хорошие ответы.

Zlatko 10.09.2018 09:21
1
1
102
2

Ответы 2

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

Вы должны учитывать эту информацию при структурировании вашей модели данных. Например. предположим, вы пишете сообщения в коллекцию posts и хотите добавить автора сообщения из коллекции authors.

Теперь самый простой способ сделать это - встроить эти данные непосредственно в ваш документ post. Например. для создания данных мы используем вставлять, примерно так:

// 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 (используя Обновить):

// 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.

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

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

Другие вопросы по теме