如何在Go中操作MongoDB克隆文档并修改_id(无需知晓数据结构)
在Go中克隆MongoDB文档并修改_id后插入(无需知晓数据结构)
你当前使用的bson.M是动态的map[string]interface{}类型,完全支持在无需知晓完整数据结构的情况下修改_id字段,具体实现如下:
直接对查询得到的result(即bson.M实例)进行_id字段的覆盖即可,代码示例:
var result bson.M err := coll.FindOne(context.TODO(), filter).Decode(&result) if err != nil { panic(err) } // 生成MongoDB标准的ObjectID作为新文档的_id result["_id"] = primitive.NewObjectID() // 若需自定义_id值(比如字符串类型),直接赋值即可: // result["_id"] = "my-custom-id-123" if _, err := coll.InsertOne(context.TODO(), result); err != nil { panic(err) }
关键说明:
bson.M本质是键值对映射,通过键名"_id"可以直接访问和修改该字段,无需提前定义结构体或知晓其他字段结构。primitive.NewObjectID()是MongoDB Go驱动提供的工具方法,用于生成符合MongoDB规范的ObjectID;如果你的业务需要非ObjectID类型的_id,直接赋值对应类型的值即可(如字符串、数字等)。- 无需额外克隆操作,直接修改
bson.M实例后插入即可,因为InsertOne会将当前的result内容作为新文档插入。
内容的提问来源于stack exchange,提问作者Lex
相关产品推荐
相关产品推荐

