Anda tidak dapat menggunakan antarmuka dalam dokumen karena alasan yang Anda catat. Dekoder tidak memiliki informasi tentang jenis yang akan dibuat.
Salah satu cara untuk menangani ini adalah dengan mendefinisikan sebuah struct untuk menampung informasi tipe:
type NodeWithType struct {
Node Node `bson:"-"`
Type string
}
type Workflow struct {
CreatedAt time.Time
StartedAt time.Time
CreatedBy string
Nodes []NodeWithType
}
Implementasikan fungsi SetBSON pada tipe ini. Fungsi ini harus memecahkan kode tipe string, membuat nilai tipe yang benar berdasarkan string tersebut dan membatalkan marshal ke nilai tersebut.
func (nt *NodeWithType) SetBSON(r bson.Raw) error {
}