猫鼬-如何防止猫鼬在模型实例化时创建_id

时间:2018-08-31 13:58:27

标签: node.js mongodb mongoose

我希望MongoDB本身在插入时添加_id,以便可以使用ObjectID跟踪插入时间,但是当我执行new MyModel(...)时,moonggose将添加id字段。

如何防止这种情况,以便数据库本身添加ID?

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

编辑:我看到猫鼬在技术上不可能做到这一点,因此可以在插入完成后添加由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 个答案:

答案 0 :(得分:0)

这是一个有趣的用例。当您调用模型构造函数时,猫鼬确实会创建_id!

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

  1. 不要使用猫鼬。较低级别的mongo驱动程序不会创建您插入集合中的_ids util。

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

  3. 最后,您可以使用手动保存的中间件来更新_id,方法是手动生成一个新的(具有mongoose.Types.ObjectId()),以获取更准确的时间信息。

如果您要引入在插入文档时更新的createdAt字段,那么您还将处理预保存中间件。这就是这个受欢迎的插件的实现方式:https://github.com/drudge/mongoose-timestamp/blob/master/index.js