mongodb - 如何在 UpdateOne 语句中做“省略”
问题描述
我在正文中收到了一些字段,但我有以下代码:
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() 期间进行省略?
您可以在传递到更新语句之前构建一个结构。update 语句在通过之前会经过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
字段的值不应更新。
推荐阅读
- java - 如何将一个 Apache HTTP 服务器与运行在同一 linux 服务器上的两个 apache tomcat 实例连接起来
- r - R数据框由df.x中的多列合并
- robotframework - 机器人框架在失败中停止拆卸执行
- c# - ASP.NET Core 3.0:禁用 ASP0000 不要在“ConfigureServices”中调用“IServiceCollection.BuildServiceProvider”
- javascript - 每小时50分钟刷新页面的JS代码
- c++ - 内存模型,负载获取语义实际上是如何工作的?
- monitoring - 在 Zabbix Agent 和 Server 4 中配置智能监控工具
- java - 当我使用 Apache poi java 单击 excel 单元格时出现十进制数字
- c++ - 有没有办法将矢量复制到模板?
- java - springboot如何返回包含大浮点数的json?