【问题标题】:How to have a Mongoose model field populate programatically?如何以编程方式填充 Mongoose 模型字段?
【发布时间】:2017-10-24 03:12:51
【问题描述】:

我有以下架构:

const geoframeSchema = mongoose.Schema({
  count: Number,
  createdBy: String,
  polygons: [
    {
      points: [{ lat: Number, lng: Number }],
    },
  ],
});

我想以某种方式拥有另一个字段createdAt,它使用doc._id.getTimestamp() 填充。这样我就不必每次用户查询此集合时都注入该值。我将如何实现这一目标?

【问题讨论】:

标签: javascript mongoose mongoose-schema


【解决方案1】:

您可以使用预保存挂钩:

const geoframeSchema = mongoose.Schema({
    count: Number,
    createdBy: String,
    createdAt: Date,
    polygons: [
        {
            points: [{ lat: Number, lng: Number }],
        },
    ],
});

geoframeSchema.pre('save', function() {
    this.createdAt = doc._id.getTimestamp();
});

您必须确保 doc._id.getTimestamp() 可以从架构中访问或将其设置为实例方法:

geoframeSchema.methods.getTimestamp = function() {
    ...
}

...然后在您的预保存挂钩中调用它:

geoframeSchema.pre('save', function() {
    this.createdAt = this.getTimestamp();
});

在这种情况下,您还可以使用架构选项对象来设置将自动填充的时间戳:

const geoframeSchema = mongoose.Schema({
    count: Number,
    createdBy: String,
    polygons: [
        {
            points: [{ lat: Number, lng: Number }],
        },
    ],
}, {
    timestamps: {
        createdAt: 'createdAt',
        updatedAt: 'updatedAt'
    }
});

你可以这样命名你的时间戳:

createdAt: 'timestampName'

【讨论】:

  • 时间戳,内置!甚至没有意识到..谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
  • 2017-05-21
  • 2015-06-09
  • 2013-09-13
  • 2013-12-24
  • 2019-09-27
相关资源
最近更新 更多