我希望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
}
}
答案 0 :(得分:0)
这是一个有趣的用例。当您调用模型构造函数时,猫鼬确实会创建_id!
我看到了三条前进的道路:
不要使用猫鼬。较低级别的mongo驱动程序不会创建您插入集合中的_ids util。
传递一个普通的javascript对象,直到准备好保存 ,然后使用Model.create方法。
最后,您可以使用手动保存的中间件来更新_id,方法是手动生成一个新的(具有mongoose.Types.ObjectId()),以获取更准确的时间信息。
如果您要引入在插入文档时更新的createdAt字段,那么您还将处理预保存中间件。这就是这个受欢迎的插件的实现方式:https://github.com/drudge/mongoose-timestamp/blob/master/index.js