mon goose свойство схемы по умолчанию не обновляется - PullRequest
1 голос
/ 15 апреля 2020

Я сохраняю метку времени при создании документа goose.

Моя проблема в том, что метка времени не изменяется должным образом. Всякий раз, когда я сохраняю документ, createdAt возвращает момент запуска сервера.

mon goose модель для сохранения timeStamp (с использованием свойства createdAt)

import { Schema, model } from 'mongoose';
import moment from 'moment-timezone';

const requestSchema = new Schema({
  createdAt: {
    type: String,
    default: moment
      .tz(new Date(), 'Asia/Seoul')
      .format('YYYY-MM-DD HH:mm:ss'),
  },
  ...
})

And I ' m создание документа mongodb в функции, подобной следующей

export const returnRecordObject = async (arg) => {
  const recordObject = { type: 'record' }
  const savedRecord = await models.Request.create(recordObject);
  if(savedRecord) {
    return savedRecord;
  } else {
    ...
  }
}

Кажется, что new Date() не вызывается при каждом create вызове mon goose. Я не очень знаком с mon goose, поэтому я не смог найти API.

Подводя итог,

1) Как я могу сделать mon goose по умолчанию для обновляться при каждом create или другом вызове функции?

2) Было бы лучше явно назначить свойство createdAt до create из mon goose? Например, код, приведенный ниже, лучше, чем выше?

import { Schema, model } from 'mongoose';

const requestSchema = new Schema({
  // Remove createdAt property
  ...
})
export const returnRecordObject = async (arg) => {
  const recordObject = { type: 'record', createdAt: moment
      .tz(new Date(), 'Asia/Seoul')
      .format('YYYY-MM-DD HH:mm:ss')}
  const savedRecord = await models.Request.create(recordObject);
  if(savedRecord) {
    return savedRecord;
  } else {
    ...
  }
}

1 Ответ

1 голос
/ 15 апреля 2020

Вы передали значение default, которое означает, что по умолчанию используется значение moment.tz(new Date(), 'Asia/Seoul').format('YYYY-MM-DD HH:mm:ss'), когда выполняется эта строка кода. Чтобы заставить его работать так, как вы ожидали, вам нужно передать функцию, которая возвращает moment.tz(new Date(), 'Asia/Seoul').format('YYYY-MM-DD HH:mm:ss'). Что-то вроде:

default: function() {
  return moment.tz(new Date(), 'Asia/Seoul').format('YYYY-MM-DD HH:mm:ss')
}...

Вы можете прочитать больше: здесь

...