4

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

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

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

猫鼬 3.0.x

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

4

2 回答 2

5

使用一个设置器,title它会为你提供 slugifies 和 idifies:https ://gist.github.com/3658511

如果您想确保您的代码仅在创建对象后执行,请检查this.isNewsetter 内部。

于 2012-09-06T16:59:41.057 回答
2

这是你想要的?

您可以在保存模型之前定义一个函数来创建 _id,如: http: //mongoosejs.com/docs/middleware.html

如果在 Mongoose 默认创建 _id 之后调用此中间件(我猜不是),您可以使用 _id 选项告诉 Mongoose 不要创建 _id。 http://mongoosejs.com/docs/guide.html#options

于 2012-08-31T17:33:05.213 回答