Mongoose从其他字段创建自定义_id

时间:2012-08-31 17:24:50

标签: node.js mongodb mongoose

我知道,如果没有给出,Mongoose会自动使用ObjectID填充_id字段,并且在构造模型的实例时可以覆盖_id。

我想要的是:以透明的方式从其他字段创建_id。我想在创建模型实例时省略_id字段,然后调用一个函数来填充它。此函数应在Schema级别声明,并且使用该模型的任何人都不知道_id由函数而不是Mongoose填充。

我错过了Schema构造函数的钩子或参数吗?

Mongoose 3.0.x

让我们更具体一点。想象一下BlogPost我希望通过标题来创建漂亮的网址。为了将slug映射到Mongo对象,我将slug哈希并将其转换为ObjectID以利用它的好处。现在我正在寻找的是一个透明的方法,它允许我只通过BlogPost创建一个title的实例,并自动生成slug_id属性

2 个答案:

答案 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