在Mongoose discriminators的檔案中,它顯示了判別器的 Event 和 ClickedLinkEvent 示例模型:
const options = { discriminatorKey: 'kind' };
const eventSchema = new mongoose.Schema({ time: Date }, options);
const Event = mongoose.model('Event', eventSchema);
const ClickedLinkEvent = Event.discriminator('ClickedLink',
new mongoose.Schema({ url: String }, options));
我將此應用于我的模型,但它為事件創建集合,而不是 ClickedLinkEvent。我希望 ClickedLinkEvent 繼承所有欄位并為此模型創建集合,而不是為事件創建集合。
有什么方法可以從 Event 繼承欄位,但不為其創建集合?還是我應該使用鑒別器?
uj5u.com熱心網友回復:
區分列的概念意味著不同物體的單個表(RDBMS)或集合(MongoDB)存盤。
用例是為了簡化對相似物件的公共欄位的操作。例如,在給定示例中按日期搜索/計算所有事件(包括點擊)。
如果您需要單獨的集合,請不要使用鑒別器。在架構定義級別使用“繼承”,它將僅限于 javascript 空間。對于點擊事件示例:
// common fields
const eventDefinition = { time: Date }
// specific fields
const ClickedLinkEventDefinition = {...eventDefinition, url: String}
// completely separate models and collections on db level
const eventSchema = new mongoose.Schema(eventDefinition, options);
const Event = mongoose.model('Event', eventSchema);
const ClickedLinkEvent = new mongoose.Schema(ClickedLinkEventDefinition , options);
uj5u.com熱心網友回復:
@Alex Blex 的回答是正確的。但據我了解,我們仍然可以將鑒別器與模式一起使用。這是我的解決方案:
const options = { discriminatorKey: 'kind' };
const eventSchema = new mongoose.Schema({ time: Date }, options);
const ClickedLinkEventSchema = new mongoose.Schema({ field: { type: Number } }, options);
const ClickedLinkEventBase = mongoose.model('ClickedLink', ClickedLinkEventSchema)
const ClickedLinkEvent = ClickedLinkEventBase.discriminator('Event', eventSchema);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/405562.html
標籤:
下一篇:如何在mongodb中存盤空陣列
