dongpouda6700 2019-07-08 03:21 采纳率: 100%
浏览 4548
已采纳

如何更新多个MongoDB字段

我对Go官方MongoDB感到非常沮丧。 确实没有文档。 我正在尝试更新集合中的多个字段。 通常,所有引用都是最简单且更新一个字段:

    update := bson.D{bson.E{"$set", bson.E{"releaseimage", r.ReleaseImage}}}

那个有效。 我尝试了各种方法来扩展它以设置两个字段并获取错误:

    update := bson.D{
        {"$set",
            bson.E{"releaseimage", r.ReleaseImage},
            //bson.E{"releasepath", r.ReleasePath},
        },
        // {"$set",
        //  bson.E{
        //      "releasepath", r.ReleasePath}},
    }

第一次删除了第一组中的注释。 第二次尝试的语法无效,请删除第二组注释,因为是无效的语法。 我很茫然。 为了继续前进,我正在进行两次更新,一次又一次。 效率低下。

谢谢。

  • 写回答

2条回答 默认 最新

  • donglei1699 2019-07-08 05:11
    关注

    For multiple fields, you have to create an array of bson element(bson.E). then append/assign as many fields you want in array item.

    var update []bson.E
    if r.ReleaseImage != "" {
        update = append(update, bson.E{"releaseimage", r.ReleaseImage})
    }
    if r.Releasepath != "" {
        update = append(update, bson.E{"releasepath", r.Releasepath})
    }
    // now update db
    result, err := coll.UpdateOne(
            context.Background(),
            bson.D{
                {"id", r.ID},
            },
            bson.D{
                {"$set", update},
                {"$currentDate", bson.D{
                    {"updated", true},
                }},
            },
        )
    

    Hope this helps

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 咨询一下有关于王者荣耀赢藏战绩
  • ¥100 求购一套带接口实现实习自动签到打卡
  • ¥50 MacOS 使用虚拟机安装k8s
  • ¥500 亚马逊 COOKIE我如何才能实现 登录一个亚马逊账户 下发新 COOKIE ..我使用下发新COOKIE 导入ADS 指纹浏览器登录,我把账户密码 修改过后,原来下发新COOKIE 不会失效的方式
  • ¥20 玩游戏gpu和cpu利用率特别低,玩游戏卡顿
  • ¥25 oracle中的正则匹配
  • ¥15 关于#vscode#的问题:把软件卸载不会再出现蓝屏
  • ¥15 vimplus出现的错误
  • ¥15 usb无线网卡转typec口
  • ¥30 怎么使用AVL fire ESE软件自带的优化模式来优化设计Soot和NOx?