Как я могу сделать 'пустым' в уставе UpdateOne - PullRequest
0 голосов
/ 17 марта 2020

Я получаю некоторые поля в теле, но у меня есть этот код:

    registro := bson.M{
        "$set": bson.M{
            "nombre":          b.Nombre,
            "apellidos":       b.Apellidos,
            "fechaNacimiento": b.FechaNacimiento,
            "email":           b.Email,
            "password":        passwordEncriptada,
            "avatar":          b.Avatar,
            "banner":          b.Banner,
            "biografia":       b.Biografia,
            "domicilio":       b.Domicilio,
            "sitioWeb":        b.SitioWeb,
        },
    }

    objID, _ := primitive.ObjectIDFromHex(ID)
    filtro := bson.M{"_id": bson.M{"$eq": objID}}

    _, err := col.UpdateOne(ctx, filtro, registro)
    if err != nil {
        return false, err
    }

Это приводит ко всем полям в документе MongoDB, но некоторые из этих полей пусты.

Как я могу сделать omitempty во время UpdateOne()?

С уважением

1 Ответ

0 голосов
/ 19 марта 2020

Как я могу сделать пустую строку во время UpdateOne ()?

Вы можете просто построить структуру перед передачей в оператор обновления. Оператор обновления будет передан с go по bson.Marshal () . Например, если у вас есть следующая структура:

type Test struct {
    Banner string      `json:"banner" bson:"banner,omitempty"`
    Email  string      `json:"email" bson:"email,omitempty"`
    Avatar string      `json:"avatar" bson:"avatar,omitempty"`
    Age    int32       `json:"age" bson:"age,omitempty"`
}

Вы можете просто построить структуру для обновления, как показано ниже:

filter := bson.M{}
foo := Test{Banner:"updated", Avatar:"updated", Email:"", Age:0}
statement := bson.M{"$set": foo}
result, err := collection.UpdateOne(ctx, filter, statement)

После операции обновления значение Email и Age поле не должно обновляться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...