Você não pode usar uma interface em um documento pelo motivo indicado. O decodificador não possui informações sobre o tipo a ser criado.
Uma maneira de lidar com isso é definir uma estrutura para armazenar as informações de tipo:
type NodeWithType struct {
Node Node `bson:"-"`
Type string
}
type Workflow struct {
CreatedAt time.Time
StartedAt time.Time
CreatedBy string
Nodes []NodeWithType
}
Implemente a função SetBSON neste tipo. Essa função deve decodificar a string de tipo, criar um valor do tipo correto com base nessa string e desempacotar para esse valor.
func (nt *NodeWithType) SetBSON(r bson.Raw) error {
}