代码之家  ›  专栏  ›  技术社区  ›  user3690467

Mongoose-如何防止Mongoose在模型实例化时创建id

  •  2
  • user3690467  · 技术社区  · 7 年前

    new MyModel(...) ,moongose将添加id字段。

    如何防止这种情况发生,以便db本身添加id?

    或者,我如何创建一个将由数据库设置为插入时间的字段?

    编辑:我发现mongoose在技术上不可能做到这一点,所以在插入完成后,是否可以添加MongoDB设置的字段?

    {
      timestamp: {
        type: Date,
        required: true
      },
      signaler: {
        type: String,
        required: true,
        trim: true
      },
      source: {
        type: String,
        required: false,
        trim: true
      },
      category: {
        type: String,
        required: false,
        trim: true
      },
      key: {
        type: String,
        required: true,
        trim: true
      },
      level: {
        type: String,
        required: false,
        trim: true,
        uppercase: true,
        enum: ['ALARM', 'WARNING', 'NORMAL']
      },
      payload: {
        type: Schema.Types.Mixed,
        required: true
      }
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Robert Moskal    7 年前

    这是一个有趣的用例。当你调用一个模型构造函数时,Mongoose确实会创建这个id!

    我看到了三条前进的道路:

    1. 传递一个普通的javascript对象,直到您准备好保存 然后使用Model.create方法。

    2. 最后,通过手动生成一个新的(使用mongoose.Types.ObjectId())具有更准确的时间信息,您可以使用预保存中间件更新\u id。

    如果您想引入一个createdAt字段,该字段在插入文档时会更新,那么您还需要处理预保存中间件。这个流行的插件就是这样做的: https://github.com/drudge/mongoose-timestamp/blob/master/index.js