首页 > 解决方案 > 如何将时间戳添加到猫鼬模式子字段?

问题描述

我正在尝试在increatedAtupdatedAtotpgenerate: {}verify:{}

我知道使用{ timestamps: true }会将createdAtupdatedAt时间戳添加到整个架构中。`

const userSchema = new mongoose.Schema({    
    email: { type: String, unique: true },
    name: { type: String }, 
    mobileNumber: {
        isVerified: {type: Boolean, default: false},
        otp: {
            generate: {
              attempts: {type: Number, default: 0},
              total: {type: Number, default: 0},
              createdAt: {type: Date},
              updatedAt: {type: Date}
            },
            verify: {
              attempts: {type: Number, default: 0},
              total: {type: Number, default: 0},
              createdAt: {type: Date},
              updatedAt: {type: Date}
            }
          }
    }
}, { timestamps: true });

将单个时间戳添加到子字段的正确解决方案是什么?{timestamps: true}通过添加到子字段来做同样的事情是否正确?

            generate: {
              attempts: {type: Number, default: 0},
              total: {type: Number, default: 0},
              {timestamps: true}
            },
            verify: {
              attempts: {type: Number, default: 0},
              total: {type: Number, default: 0},
              {timestamps: true}
            }

标签: mongodbmongoosemongoose-schema

解决方案


您必须为子字段定义一个单独的架构,然后将其用作子字段的类型。

const otpSchema = new mongoose.Schema({    
    attempts: { type: Number, default: 0 },
    total: { type: Number, default: 0 }
}, {
    _id: false, // omit _id fields for subfields
    timestamps: true // timestamps options for subfields
});

const userSchema = new mongoose.Schema({    
    email: { type: String, unique: true },
    name: { type: String }, 
    mobileNumber: {
        isVerified: { type: Boolean, default: false },
        otp: {
            generate: otpSchema, // use the defined schema
            verify: otpSchema
        }
    }
}, { timestamps: true });

推荐阅读