Как добавить значения в объект bson.D - PullRequest
1 голос
/ 22 марта 2019

Я работаю с 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 может быть построен как

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

Но как мне сделать его динамичным?

1 Ответ

1 голос
/ 22 марта 2019

Добавьте 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.E на bson.DocElem для mgo.

...