鉴频器(discriminators)
原文:The model.discriminator() function 翻译:小虾米(QQ:509129)
The model.discriminator() function
model.discriminator() function鉴别器是一个模式继承机制。他们使你重叠模式上同一标的MongoDB集合有多个模型。
假设你想在一个集合中跟踪不同类型的事件。每一件事件都会有一个时间戳,但事件表示点击链接应该有一个URL。你可以使用model.discriminator()函数。这个函数需要2个参数,一个模型的名字和一个鉴频器模式。它返回一个模型是基础模式的结合和鉴频器模式。
var options = {discriminatorKey: 'kind'};
var eventSchema = new mongoose.Schema({time: Date}, options);
var Event = mongoose.model('Event', eventSchema);
// ClickedLinkEvent is a special type of Event that has
// a URL.
var ClickedLinkEvent = Event.discriminator('ClickedLink',
new mongoose.Schema({url: String}, options));
// When you create a generic event, it can't have a URL field...
var genericEvent = new Event({time: Date.now(), url: 'google.com'});
assert.ok(!genericEvent.url);
// But a ClickedLinkEvent can
var clickedEvent =
new ClickedLinkEvent({time: Date.now(), url: 'google.com'});
assert.ok(clickedEvent.url);鉴别器保存事件模型的集合
假设你创建一个鉴别器跟踪事件,新用户注册。这些SignedUpEvent实例将被存储在相同的集合作为通用的事件和ClickedLinkEvent实例。
鉴别器的键
mongoose讲述不同的鉴别模型之间的差异是由“鉴频器的键”,默认是__t。Mongoose添加一个叫做__t字符串路径到你的模式中,它采用追踪鉴别本文档实例。
鉴别器添加鉴别键查询
鉴别器模型是特殊的;他们重视鉴别键查询。换句话说,find(), count(), aggregate(),等等,有足够的智慧来解释鉴别器。
鉴别器复制的前置和后置钩子
作者也使用他们的基础模式的前置和后置的中间件。然而,你也可以把中间件来鉴别模式不影响基础模式。
处理自定义_id字段
鉴别器的字段是基础模式的字段和鉴别器模式的字段的结合,并且鉴频器模式的字段优先。这种行为变得古怪当你有一个自定义_id字段。一个模式默认情况下得有_id字段,所以基础模式的_id字段将得到由鉴别器模式的默认_id字段覆盖。
你可以通过设置_id选项为false 在鉴别器的模式如下图所示。
Last updated
Was this helpful?