No puede usar una interfaz en un documento por el motivo que anotó. El decodificador no tiene información sobre el tipo a crear.
Una forma de manejar esto es definir una estructura para contener la información de tipo:
type NodeWithType struct {
Node Node `bson:"-"`
Type string
}
type Workflow struct {
CreatedAt time.Time
StartedAt time.Time
CreatedBy string
Nodes []NodeWithType
}
Implemente la función SetBSON en este tipo. Esta función debería decodificar la cadena de tipo, crear un valor del tipo correcto basado en esa cadena y descomponerse a ese valor.
func (nt *NodeWithType) SetBSON(r bson.Raw) error {
}