mongodb - 我如何在UpdateOne语句中进行“遗失”

标签 mongodb go

我在体内收到一些字段,但是我有以下代码:

    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()

问候

最佳答案

我如何在UpdateOne()期间做一个遗漏?

您可以在传递到更新语句之前先构建一个结构。更新语句将在传递之前通过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)

更新操作后,不应更新EmailAge字段的值。

关于mongodb - 我如何在UpdateOne语句中进行“遗失”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60715770/

相关文章:

image - 在Golang中检查HEIC文件格式

arrays - 将带有嵌套数组和对象的 JSON 数据解码为 Go 结构

node.js - Angular 使用错误的 URL 通过 NodeJS 查询 MongoDB

hosting - 设置 Mongo DB 和托管

c# - MongoDB 组到 C# API

algorithm - Go中几乎增加的序列:如何循环避免索引越界?

node.js - 无法通过 mongo compass 创建数据库

node.js - MongoDB和nodejs(express框架)中的自动增量id字段

go - 在反引号字符串中添加字符串插值

json - Golang 不能使用 as type struct array 或 slice literal