登录
首页 >  Golang >  Go问答

使用结构体在 mongo-go-driver 中进行更新操作

来源:stackoverflow

时间:2024-03-25 19:00:39 138浏览 收藏

在 MongoDB 的 Go 驱动程序中,可以使用结构体来更新文档。要将结构体转换为 BSON 文档,可以采用两种方法。对于替换操作,可以使用 `ReplaceOne()` 函数,该函数将使用结构体的 ID 替换现有文档。对于更新操作,可以使用 `UpdateOne()` 函数,需要提供一个过滤器和一个包含要更新字段的 BSON 文档。

问题内容

mongo-go-driver的更新函数可以这样调用。

filter := bson.d{"username", username}
update := bson.d{{"$set",
    bson.d{
        {"name", person.name},
    },
}}
result, err := collection.updateone(ctx, filter, update)
type person struct {
    id       primitive.objectid `json:"_id,omitempty" bson:"_id,omitempty"`
    username string             `json:"username,omitempty" bson:"username,omitempty"`
    name     string             `json:"name,omitempty" bson:"name,omitempty"`
}

但是,我需要使用 person 结构调用更新函数,而不像这样提及 person 结构的每个字段。

filter := bson.D{"username", username}
update := bson.D{{"$set", <>}}
result, err := collection.UpdateOne(ctx, filter, update)

如何将 person 结构转换为 bson 文档?


解决方案


replaceone 我想这就是你所追求的:

// Use it's ID to replace
        filter := bson.M{"_id": existing.ID}
        // Create a replacement object using the existing object
        replacementObj := existing
        replacementObj.SomeFieldToChange = "new-replacement-object"
        updateResult, err := coll.ReplaceOne(context.Background(), filter, replacementObj)
        assertNotErr(t, err)
        assertEquals(t, 1, int(updateResult.ModifiedCount))

请注意,errnotfound 不再像在 mgo 中那样抛出 - 您必须检查修改/更新的计数。

今天关于《使用结构体在 mongo-go-driver 中进行更新操作》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>