如何向 bson.D 对象添加值

How to add values to an bson.D object

我正在使用 golang 和 MongoDB 驱动程序,我想根据从外部获得的数据修补我的一个对象:

我有一个结构:

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

和补丁(随 MongoDB 更新)

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

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

我想让 setObject 有点动态:

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

我已经看到 setObject can be built like

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

但是我怎样才能使它动态化呢?

根据您使用的客户端,将 DocElem (mgo) or an E (go.mongodb.org) 添加到切片。

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},
}

用 bson.DocElem 替换 mgo 的 bson.E。