gpt4 book ai didi

node.js - Mongoose - 如何防止 mongoose 在模型实例化时创建 _id

转载 作者:可可西里 更新时间:2023-11-01 10:46:04 27 4
gpt4 key购买 nike

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

如何防止这种情况发生,以便数据库本身添加 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
}
}

最佳答案

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

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

  1. 不要使用 Mongoose 。较低级别的 mongo 驱动程序不会在您插入集合时创建 _ids。

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

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

    <

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

关于node.js - Mongoose - 如何防止 mongoose 在模型实例化时创建 _id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52117092/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com