Не можете да използвате интерфейс в документ поради причината, която отбелязахте. Декодерът няма информация за типа, който да създаде.
Един от начините да се справите с това е да дефинирате структура, която да съдържа информацията за типа:
type NodeWithType struct {
Node Node `bson:"-"`
Type string
}
type Workflow struct {
CreatedAt time.Time
StartedAt time.Time
CreatedBy string
Nodes []NodeWithType
}
Приложете функцията SetBSON за този тип. Тази функция трябва да декодира низа от типа, да създаде стойност от правилния тип въз основа на този низ и да демаршалира до тази стойност.
func (nt *NodeWithType) SetBSON(r bson.Raw) error {
}