Mongoose - Как предотвратить создание _id при создании экземпляра модели - PullRequest
0 голосов
/ 31 августа 2018

Я хочу, чтобы MongoDB сама добавляла _id при вставке, чтобы я мог отслеживать время вставки, используя ObjectID, но когда я сделаю new MyModel(...), moongose ​​добавит поле id.

Как мне это предотвратить, чтобы сама БД добавила идентификатор?

В качестве альтернативы, как мне создать поле, для которого будет установлено время ВСТАВКИ в БД?

Редактировать: Я вижу, что это технически невозможно с mongoose, поэтому возможно ли добавить поле, установленное MongoDB, когда вставка будет завершена?

Моя модель (если применимо):

{
  timestamp: {
    type: Date,
    required: true
  },
  signaler: {
    type: String,
    required: true,
    trim: true
  },
  source: {
    type: String,
    required: false,
    trim: true
  },
  category: {
    type: String,
    required: false,
    trim: true
  },
  key: {
    type: String,
    required: true,
    trim: true
  },
  level: {
    type: String,
    required: false,
    trim: true,
    uppercase: true,
    enum: ['ALARM', 'WARNING', 'NORMAL']
  },
  payload: {
    type: Schema.Types.Mixed,
    required: true
  }
}

1 Ответ

0 голосов
/ 31 августа 2018

У вас есть интересный вариант использования. Mongoose действительно создает этот _id при вызове конструктора модели!

Я вижу три пути вперед:

  1. Не используйте мангуст. Драйвер монго нижнего уровня не создает _ids, если вы вставляете в коллекцию.

  2. Передавайте обычный объект JavaScript, пока не будете готовы сохранить затем используйте метод Model.create.

  3. Наконец, вы можете использовать промежуточное программное обеспечение перед сохранением для обновления _id, вручную генерируя новое (с помощью mongoose.Types.ObjectId ()), которое будет иметь более точную информацию о времени.

Если вы хотите ввести поле createAt, которое обновляется при вставке документа, то вы также собираетесь обрабатывать промежуточное ПО предварительного сохранения. Вот как это делает этот популярный плагин: https://github.com/drudge/mongoose-timestamp/blob/master/index.js

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