我知道,如果没有给出,Mongoose会自动使用ObjectID填充_id字段,并且在构造模型的实例时可以覆盖_id。
我想要的是:以透明的方式从其他字段创建_id。我想在创建模型实例时省略_id字段,然后调用一个函数来填充它。此函数应在Schema级别声明,并且使用该模型的任何人都不知道_id由函数而不是Mongoose填充。
我错过了Schema构造函数的钩子或参数吗?
Mongoose 3.0.x
让我们更具体一点。想象一下BlogPost
我希望通过标题来创建漂亮的网址。为了将slug映射到Mongo对象,我将slug哈希并将其转换为ObjectID
以利用它的好处。现在我正在寻找的是一个透明的方法,它允许我只通过BlogPost
创建一个title
的实例,并自动生成slug
和_id
属性
答案 0 :(得分:4)
在title
上使用设置器,该设置器会为您进行模仿和识别:https://gist.github.com/3658511
如果您想确保只在创建对象后执行代码,请检查设置器中的this.isNew
。
答案 1 :(得分:2)
这是你在找什么?
您可以在保存模型之前定义一个函数来创建_id,如: http://mongoosejs.com/docs/middleware.html
如果默认情况下Mongoose创建了_id之后调用了此中间件(我的猜测不是),您可以告诉Mongoose不使用_id选项创建_id。 http://mongoosejs.com/docs/guide.html#options