一架梯子,一头程序猿,仰望星空!
GoLang MongoDB教程 > 内容正文

Golang MongoDB更新文档


本章介绍Golang MongoDB如何更新文档数据。

MongoDB支持的更新函数

  • Collection.UpdateOne - 更新一条数据
  • Collection.UpdateMany - 批量更新数据
  • Collection.ReplaceOne - 替换数据

准备测试数据

往coll集合插入一批数据

docs := []interface{}{
    bson.D{
        {"item", "canvas"},
        {"qty", 100},
        {"size", bson.D{
            {"h", 28},
            {"w", 35.5},
            {"uom", "cm"},
        }},
        {"status", "A"},
    },
    bson.D{
        {"item", "journal"},
        {"qty", 25},
        {"size", bson.D{
            {"h", 14},
            {"w", 21},
            {"uom", "cm"},
        }},
        {"status", "A"},
    },
    bson.D{
        {"item", "mat"},
        {"qty", 85},
        {"size", bson.D{
            {"h", 27.9},
            {"w", 35.5},
            {"uom", "cm"},
        }},
        {"status", "A"},
    },
    bson.D{
        {"item", "mousepad"},
        {"qty", 25},
        {"size", bson.D{
            {"h", 19},
            {"w", 22.85},
            {"uom", "in"},
        }},
        {"status", "P"},
    },
    bson.D{
        {"item", "notebook"},
        {"qty", 50},
        {"size", bson.D{
            {"h", 8.5},
            {"w", 11},
            {"uom", "in"},
        }},
        {"status", "P"},
    },
    bson.D{
        {"item", "paper"},
        {"qty", 100},
        {"size", bson.D{
            {"h", 8.5},
            {"w", 11},
            {"uom", "in"},
        }},
        {"status", "D"},
    },
    bson.D{
        {"item", "planner"},
        {"qty", 75},
        {"size", bson.D{
            {"h", 22.85},
            {"w", 30},
            {"uom", "cm"},
        }},
        {"status", "D"},
    },
    bson.D{
        {"item", "postcard"},
        {"qty", 45},
        {"size", bson.D{
            {"h", 10},
            {"w", 15.25},
            {"uom", "cm"},
        }},
        {"status", "A"},
    },
    bson.D{
        {"item", "sketchbook"},
        {"qty", 80},
        {"size", bson.D{
            {"h", 14},
            {"w", 21},
            {"uom", "cm"},
        }},
        {"status", "A"},
    },
    bson.D{
        {"item", "sketch pad"},
        {"qty", 95},
        {"size", bson.D{
            {"h", 22.85},
            {"w", 30.5},
            {"uom", "cm"},
        }},
        {"status", "A"},
    },
}

result, err := coll.InsertMany(context.Background(), docs)

更新一个文档

result, err := coll.UpdateOne(
    context.Background(), // 获取上下文参数
    bson.D{ // 设置查询条件, 查询item=paper的文档
        {"item", "paper"},
    },
    bson.D{ // 设置更新表达式
        {"$set", bson.D{ // 使用$set操作符设置更新的字段内容
            {"size.uom", "cm"},  // 将size.uom的值改为cm
            {"status", "P"}, // 将status的值改为P
        }},
        {"$currentDate", bson.D{  //使用$currentDate操作符将lastModified字段值更新为最新的时间
            {"lastModified", true},
        }},
    },
)

根据查询条件匹配一个文档,然后更新这个文档内容。

提示:不了解MongoDB,请先阅读MongoDB教程

批量更新文档

跟UpdateOne函数的区别是,UpdateMany跟匹配条件,批量更新匹配的文档内容。

result, err := coll.UpdateMany(
    context.Background(),
    bson.D{ // 设置查询条件, qty > 50
        {"qty", bson.D{
            {"$lt", 50},
        }},
    },
    bson.D{ // 设置更新内容
        {"$set", bson.D{
            {"size.uom", "cm"},
            {"status", "P"},
        }},
        {"$currentDate", bson.D{
            {"lastModified", true},
        }},
    },
)

替换一个文档

根据查询条件查询指定文档,并且将文档内容替换为指定内容。

提示:替换文档指的是整体替换,不是局部更新文档的某些字段值。

result, err := coll.ReplaceOne(
    context.Background(),
    bson.D{ // 设置查询条件, item=paper
        {"item", "paper"},
    },
    bson.D{ // 设置新的文档内容
        {"item", "paper"},
        {"instock", bson.A{
            bson.D{
                {"warehouse", "A"},
                {"qty", 60},
            },
            bson.D{
                {"warehouse", "B"},
                {"qty", 40},
            },
        }},
    },
)

首先根据查询条件,找到item=paper的文档,然后替换成新的文档内容。