【问题标题】:How to add values to an bson.D object如何向 bson.D 对象添加值
【发布时间】:2019-08-13 20:29:15
【问题描述】:

我正在使用 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},
}

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

【问题讨论】:

    标签: mongodb go bson


    【解决方案1】:

    根据您使用的客户端,将 DocElem (mgo) 或 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。

    【讨论】:

    • 我花了一段时间检查 bson.D 是一个 abson.E 数组,我声明为 setElements := []bson.E{}
    • 这是最后的手段吗?我的数据库中有很多字段,所以有更好的方法吗?
    猜你喜欢
    • 1970-01-01
    • 2017-08-04
    • 2016-03-17
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多