Golang Go语言中 mongodb-driver 如何更新某个字段

发布于 1周前 作者 vueper 来自 Go语言

Golang Go语言中 mongodb-driver 如何更新某个字段


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"} 这一个数据,怎么灵活得接收这个数据和只更新这一个字段?翻了很多文章貌似都是把更新项写死的。


更多关于Golang Go语言中 mongodb-driver 如何更新某个字段的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

10 回复

我不确定是否有这样的功能,但是从道理上来说,一个 API 的设计,需要更新哪些字段应该是明确的,不应该随意变化。所以我怀疑你这是一个 XY 问题,可否先讲讲你这个需求产生的原因?

更多关于Golang Go语言中 mongodb-driver 如何更新某个字段的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


直接{’$set’:{‘content’: ‘…’}}就行了吧,没涉及的字段不会变

比如说我就单独更新一下个人信息的年龄,或者单独更新性别,不知道该怎么操作

主要是我想能不能单独传一个字段进来,就更新这个字段,而不是所有 required 的字段都要传

接收 bson.M,set bsonM 不行吗

外部传入 map[string]interface{}参数, 内部创建 bson.M,遍历 map[string]interface{}赋值 bson.M, 最后 set bsonM

这种方式可行, 补充一点:不推荐直接使用 map[string]interface{} ,可以考虑从模型 struct 转过来,那样就不用关心数据库里字段名是什么了

谢谢,看着可行哈哈

在Go语言中使用MongoDB官方驱动(go.mongodb.org/mongo-driver/mongo)来更新某个字段,你可以按照以下步骤进行:

  1. 导入必要的包

    import (
        "context"
        "go.mongodb.org/mongo-driver/bson"
        "go.mongodb.org/mongo-driver/mongo"
        "go.mongodb.org/mongo-driver/mongo/options"
        "log"
    )
    
  2. 连接到MongoDB(假设你已经设置好了连接字符串):

    client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI("mongodb://localhost:27017"))
    if err != nil {
        log.Fatal(err)
    }
    defer client.Disconnect(context.TODO())
    
    collection := client.Database("yourDatabase").Collection("yourCollection")
    
  3. 更新字段: 使用UpdateOneUpdateMany方法,根据需求选择。例如,更新字段namenewName,条件是_id为某个值:

    filter := bson.M{"_id": yourID}
    update := bson.M{"$set": bson.M{"name": "newName"}}
    res, err := collection.UpdateOne(context.TODO(), filter, update)
    if err != nil {
        log.Fatal(err)
    }
    log.Println("Matched:", res.MatchedCount, "Modified:", res.ModifiedCount)
    

以上代码示例展示了如何使用MongoDB官方驱动在Go中更新集合中的某个字段。注意,yourID应替换为实际的文档ID,yourDatabaseyourCollection应替换为你的数据库和集合名称。

回到顶部