MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Mengakses MongoDB dari Go

Jika Anda ingin mengubah nilai atau melakukan konversi jenis saat menyusun / menghapus nilai Anda dari / ke MongoDB, Anda dapat melakukannya dengan menerapkan logika marshaling / unmarshaling khusus.

Anda dapat melakukannya dengan menerapkan bson.Getter dan bson.Setter antarmuka. Di dalam metode ini, Anda dapat melakukan apa pun yang Anda inginkan dengan nilai-nilai yang dirangkai / tidak dicakup.

Cara termudah adalah dengan memperluas clientConfigData Anda ketik dengan bidang tambahan, yang akan bertipe time.Time , nilai yang Anda butuhkan:

type clientConfigData struct {
    SMTPAssoc  int       `bson:"smtp_assoc"`
    PlanType   string    `bson:"plan_type"`
    EndDateStr string    `bson:"end_date"`
    EndDate    time.Time `bson:"-"`
}

Ini memiliki nilai tag bson:"-" , karena kami tidak ingin ini muncul di MongoDB.

Dan sekarang logika marshaling / unmarhsaling kustom:

const endDateLayout = "2006-01-02 15:04:05" // Use your layout here

func (c *clientConfigData) SetBSON(raw bson.Raw) (err error) {
    type my clientConfigData
    if err = raw.Unmarshal((*my)(c)); err != nil {
        return
    }
    c.EndDate, err = time.Parse(endDateLayout, c.EndDateStr)
    return
}

func (c *clientConfigData) GetBSON() (interface{}, error) {
    c.EndDateStr = c.EndDate.Format(endDateLayout)
    type my *clientConfigData
    return my(c), nil
}

Apa yang terjadi di sini adalah SetBSON() bertanggung jawab untuk "mengisi" nilai struct Anda dengan nilai mentah yang berasal dari MongoDB, dan GetBSON() bertanggung jawab untuk memberikan nilai yang ingin Anda simpan (disusun).

Saat memuat:SetBSON() pertama-tama batalkan nilai apa adanya, lalu setel EndDate dengan benar field (yang bertipe time.Time ) dari string nilai tanggal yang berasal dari DB (EndDateStr ).

Saat menyimpan:GetBSON() pertama isi EndDateStr bidang (yang disimpan) dari EndDate bidang, dan kemudian kembali, menandakan bahwa tidak apa-apa untuk menyimpan.

Satu hal yang perlu diperhatikan:keduanya SetBSON() dan GetBSON() buat my . baru ketik di dalamnya. Alasan untuk ini adalah untuk menghindari stack overflow. Cukup mengembalikan nilai tipe clientConfigData buruk, karena kami menerapkan bson.Getter dan bson.Setter , jadi SetBSON() dan GetBSON() akan dipanggil tanpa henti. my . yang baru type tidak memiliki metode ini, jadi "rekursi" tanpa akhir tidak terjadi (type kata kunci membuat jenis baru, dan tidak "mewarisi" metode dari jenis yang mendasarinya).

Lihat juga pertanyaan terkait / serupa:Setel tanggal default saat memasukkan dokumen dengan waktu. Bidang waktu




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Menggunakan operator $slice untuk mendapatkan elemen terakhir dari array

  2. Menginstal MongoDB dengan Homebrew

  3. Nilai kenaikan Mongodb di dalam array bersarang

  4. Agregat MongoDB, cara menambahkanToSet setiap elemen array dalam pipa grup

  5. Penjadwalan Sederhana Pemeliharaan Windows di Seluruh Cluster Basis Data Anda