Saya bekerja dengan golang dan driver MongoDB, saya ingin menambal salah satu objek saya sesuai dengan data yang saya dapatkan dari luar:

Saya memiliki struktur:

type Pivot struct {
    Email        string             `json:"email"`
    Base         string             `json:"base"`
}

Dan tambalan (dengan Pembaruan MongoDB)

setMap := bson.D{
        {"$set", setElements},
    }

res, err := collection.UpdateMany(
    ctx,
    filter,
    setMap,
)

Dan saya ingin membuat setObject sedikit dinamis:

if len(pivot.Base) > 0 {
  setElements.append("base", pivot.Base) //this doesn't work...
}
if len(pivot.Email) > 0 {
  setElements.append("email", pivot.Email)
}

Saya telah melihat bahwa setObject bisa dibangun seperti

{"$set", bson.D{
    {"processed", pivot.Processed},
}

Tapi bagaimana saya bisa membuatnya dinamis?

3
estellezg 22 Maret 2019, 22:30

1 menjawab

Jawaban Terbaik

Tambahkan DocElem (mgo) atau E (go.mongodb.org) ke irisan tergantung pada klien yang Anda gunakan.

var setElements bson.D
if len(pivot.Base) > 0 {
  setElements = append(setElements, bson.E{"base", pivot.Base})
}
if len(pivot.Email) > 0 {
    setElements = append(setElements, bson.E{"email", pivot.Email})
}

setMap := bson.D{
    {"$set", setElements},
}

Ganti bson.E dengan bson.DocElem untuk mgo.

7
Cerise Limón 22 Maret 2019, 20:55