【问题标题】:mongoose schema default property is not updating猫鼬模式默认属性未更新
【发布时间】:2020-04-15 10:37:42
【问题描述】:

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

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

mongoose模型节省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) 在猫鼬的create 之前显式分配createdAt 属性会更好吗?比如下面的代码就比上面的好?

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 {
    ...
  }
}

【问题讨论】:

  • 我还需要控制默认功能,找到this documentation。在下面的答案中为任何在默认功能中寻找更多功能的人发表评论。

标签: javascript mongoose mongoose-schema


【解决方案1】:

您向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')
}...

您可以阅读更多:here

【讨论】:

    猜你喜欢
    • 2012-12-21
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2022-07-29
    • 2019-04-28
    • 2018-10-03
    • 1970-01-01
    • 2018-10-02
    相关资源
    最近更新 更多