V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
beego
aoscici
V2EX  ›  Go 编程语言

golang mongo-driver 如何更新某个字段

  •  
  •   aoscici · 2021-01-24 18:12:45 +08:00 · 1287 次点击
    这是一个创建于 477 天前的主题,其中的信息可能已经有所发展或是发生改变。
    
    type Comment struct {
    	ID      primitive.ObjectID `bson:"_id,omitempty"  json:"id"`
    	Title   string             `bson:"title"          json:"title"       binding:"required"`
    	Author  string             `bson:"author"         json:"author"      binding:"required"`
    	Content string             `bson:"content"        json:"content"     binding:"required"`
    	Like    int64              `bson:"like"           json:"like"`
    	Updated time.Time          `bson:"updated"        json:"updated"`
    }
    
    Collection.FindOneAndUpdate(ctx, filter, update, &opt).Decode(&comment)
    
    

    比如这里我只传来 {"content": "。。。"} 或者 {"author": "11"} 这一个数据,怎么灵活得接收这个数据和只更新这一个字段?翻了很多文章貌似都是把更新项写死的。

    9 条回复    2021-01-25 14:11:55 +08:00
    teawithlife
        1
    teawithlife  
       2021-01-24 18:56:16 +08:00
    我不确定是否有这样的功能,但是从道理上来说,一个 API 的设计,需要更新哪些字段应该是明确的,不应该随意变化。所以我怀疑你这是一个 XY 问题,可否先讲讲你这个需求产生的原因?
    lithiumii
        2
    lithiumii  
       2021-01-24 19:06:28 +08:00 via Android
    直接{'$set':{'content': '...'}}就行了吧,没涉及的字段不会变
    aoscici
        3
    aoscici  
    OP
       2021-01-24 19:12:07 +08:00
    @teawithlife 比如说我就单独更新一下个人信息的年龄,或者单独更新性别,不知道该怎么操作
    aoscici
        4
    aoscici  
    OP
       2021-01-24 19:26:48 +08:00
    @lithiumii 主要是我想能不能单独传一个字段进来,就更新这个字段,而不是所有 required 的字段都要传
    bankroft
        5
    bankroft  
       2021-01-24 19:42:50 +08:00
    接收 bson.M,set bsonM 不行吗
    useben
        6
    useben  
       2021-01-24 23:59:54 +08:00
    外部传入 map[string]interface{}参数, 内部创建 bson.M,遍历 map[string]interface{}赋值 bson.M, 最后 set bsonM
    yeqown
        7
    yeqown  
       2021-01-25 09:06:43 +08:00
    @useben 这种方式可行, 补充一点:不推荐直接使用 map[string]interface{} ,可以考虑从模型 struct 转过来,那样就不用关心数据库里字段名是什么了
    useben
        8
    useben  
       2021-01-25 09:44:34 +08:00
    @yeqown 也可以
    aoscici
        9
    aoscici  
    OP
       2021-01-25 14:11:55 +08:00
    @useben 谢谢,看着可行哈哈
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3286 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 04:16 · PVG 12:16 · LAX 21:16 · JFK 00:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.