Vous ne pouvez pas utiliser une interface dans un document pour la raison que vous avez indiquée. Le décodeur n'a aucune information sur le type à créer.
Une façon de gérer cela consiste à définir une structure pour contenir les informations de type :
type NodeWithType struct {
Node Node `bson:"-"`
Type string
}
type Workflow struct {
CreatedAt time.Time
StartedAt time.Time
CreatedBy string
Nodes []NodeWithType
}
Implémentez la fonction SetBSON sur ce type. Cette fonction doit décoder la chaîne de type, créer une valeur du type correct en fonction de cette chaîne et démarshaler à cette valeur.
func (nt *NodeWithType) SetBSON(r bson.Raw) error {
}