Skip to content

Discriminators

Discriminators provide a schema inheritance mechanism. They enable you to have multiple models with overlapping schemas store documents in the same MongoDB collection.

Defining Discriminators

You can use MergeSchemas or a base schema to create discriminators.

baseEventSchema := goose.NewSchema()
baseEventSchema.AddField("timestamp", goose.TypeDate)

// Discriminator Model
clickEventSchema := goose.NewSchema()
clickEventSchema.Merge(baseEventSchema)
clickEventSchema.AddField("url", goose.TypeString)

model := goose.NewModel("Event", baseEventSchema)
clickModel := model.Discriminator("Click", clickEventSchema)

Discriminator Key

Goose will add a discriminator key (e.g., __t) to your documents to keep track of the specific model type.