猫鼬模式默认属性未更新

时间:2020-04-15 02:29:35

标签: javascript mongoose mongoose-schema

猫鼬创建文档时,我正在节省时间戳。

我的问题是timeStamp没有正确更改。 每当我保存文档时,createdAt都会返回服务器启动的时刻。

猫鼬模型可节省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'),
  },
  ...
})

我正在使用如下功能创建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。 我对猫鼬不那么熟悉,所以我找不到任何API。

总结

1)如何使猫鼬的默认设置在每次create或其他函数调用时进行更新?

2)在createdAt猫鼬之前显式分配create属性会更好吗?例如,下面的代码比上面的代码好?

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

答案 0 :(得分:1)

您向mss传递了一个值,这意味着在运行此代码行时默认值为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')

您可以阅读更多内容:here