代码编织梦想

在写mongo增删改查操作时,遇到这样一个问题:我的结构体中存在一个ID字段是我在其他方法需要用到的,而在使用创建方法时,这个字段会导致数据库中创建的记录会有_id和id,其中_id是我需要的,我不希望id的出现。

解决方法:在定义NoteService结构体时,将ID字段的类型更改为primitive.ObjectID类型,并在CreateNote方法中通过primitive.NewObjectID()方法手动为_id字段赋值。具体的代码实现如下:

type MyStruct struct {
    ID         primitive.ObjectID `bson:"_id,omitempty"`
    Content    string      `form:"content" bson:"content"`
}
func (service *MyStruct) Create() serializer.Response {
    client := config.NewMongoClient()
    myCollection := client.Database("mydb").Collection("mycoll")
    myStruct := MyStruct{
        ID:         primitive.NewObjectID(),
        Content:    service.Content,
    }
    objId, err := myCollection .InsertOne(context.TODO(), myStruct)
    if err != nil {
        fmt.Println(err)
        return serializer.Success(serializer.ServerError)
    }
    return serializer.Success(objId.InsertedID)
}


在这个示例中,我们将ID字段的类型更改为primitive.ObjectID,并使用primitive.NewObjectID()方法手动为_id字段赋值。在定义ID字段时,我们添加了一个omitempty选项,这意味着如果字段的值为空,则不会将该字段包含在插入文档中。

这样,每次创建新文档时,都会自动为_id字段生成一个唯一的ObjectID值,并且不会在文档中生成一个id字段。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_56170277/article/details/129631317

golang下mongodb的自生_id和string的关系_一根烂笔头的博客-爱代码爱编程

关系 直接了当的说,原生的_id 和 string 二者之间不能直接转换。非原生 _id 则因具体而定。 原因 mongoDB 生成的 _id 是二进制数据;而不是 golang 的 string ;二进制转换成

golang mongo 查询总结-爱代码爱编程

golang 使用 “gopkg.in/mgo.v2” 查询mongo总结。mongo的增加,更新和删除操作比较简单,查询操作相对灵活复杂一些,下面对golang 查询 mongo 做个总结。完整代码上传到了 https://gitee.com/truthalone/go-mongo.git 。 1.连接 mongo //mongo.go packa

golang操作mongo-爱代码爱编程

本文采用mongo-driver/mongo驱动操作数据库 设计mongo插件结构 将代码分为如下结构 model : odm模型,主要是映射为数据库存储的表结构 constants : 存储一些常量 config : mongo的配置信息,比如空闲时长,连接数,超时时间等 mongodb : 实现了mongo的连接和关闭等功能。 目录结构如下 mo

golang 中操作 Mongo Update 的方法-爱代码爱编程

使用gopkg.in/mgo.v2库操作,修改操作主要使用mongodb中Collection对象的Update、UpdateAll、UpdateId、Upsert、UpsertId方法。 统一封装下getDB方法 package main import ( "fmt" "gopkg.in/mgo.v2" "gopkg.in/

(记录)golang获取mongo的ObjectId-爱代码爱编程

在collection.InsertOne时就有自带的方法可以获取插入时的ObjectId func (p *DbUtil) InsetOne(table string, v interface{}) (interface{}, error) { ctx, _ := context.WithTimeout(context.Background(), 1

golang 操作mongo上亿级别数据的插入优化方案-爱代码爱编程

golang 操作mongo上亿级别数据的插入优化方案 背景 mongo集群中已经存在十五亿数据,需要将一批将近8亿条数据(有重复)继续导入进数据库中。此数据存储在了sqllite 中。 要求: 1:如果数据已经存在,需要更新操作;如果没有数据,则执行新增操作。可以利用mongodb的 upsert操作来处理。 2:时间尽量压缩 方案一

golang使用mongo-driver操作——增(基础)_lsjweiyi的博客-爱代码爱编程

以5.0为基本,mongo常用数据类型与golang数据类型的对应: 类型描述代码golang中对应类型Double双精度浮点1float64String字符串2stringObject对象类型3structArray数组4数组Binary data二进制数组5[]byteObjectIdmongo中自动生成的主键_id类型7primitive.Obje

golang使用mongo-driver操作——改(进阶)_lsjweiyi的博客-爱代码爱编程

改的基础知识在前面几篇都涉及了的,很容易举一反三,这篇是为了记录一些还没涉及的知识。 将字段设置为当前时间,可以在需要记录字段更新时间时使用该方法(如果字段不存在,则会创建字段), 他有两种形式,一种是我们常见的时间格式,另一种是时间戳。 func Currentdate(mongo *mongo.Database, ctx context.Conte

golang操作mongodb_.passion的博客-爱代码爱编程

mongodb 安装配置 vim /etc/mongod.conf # 修改 net > bindip 为 0.0.0.0 # 重启,不然无法让其他网段的客户端连接 systemctl restart mongod

golang mongo curd-爱代码爱编程

package main import ( "context" "fmt" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo

golang使用mongo-爱代码爱编程

连接 首先得在admin数据库中创建角色 import ( "context" "fmt" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-d

golang使用mongo-爱代码爱编程

数组的查稍微有点不同,篇幅原因,分开来写。 需要完全一样才能匹配到,包括元素的顺序。且演示输出时转化成字符串形式: // 最基本的查询数组相关数据,下面数组的匹配,需要完全一样才能匹配到,包括元素的顺序 // 参考:ht

golang 整合mongo-爱代码爱编程

golang 整合mongo-driver 复杂文档查找aggregate 遇到的问题 现在手头有这样一个文档,用来存储心理测试问卷 { "_id":"3231231241243141", "typena

golang使用mongo-爱代码爱编程

接着上篇的基础篇,还有一些比较不一样的数据插入。mongo对比关系型数据库的特点是,字段没有限制,那么意味着我们可以给一个文档新增字段。 上一篇我们用了InsertOne和InsertMany插入文档,而现在插入字段就不是

golang使用mongo-爱代码爱编程

unset 删除指定字段: filter := bson.M{"$unset": bson.M{"object.id1": "", "date1": ""}} 数组相关 pop 删除数组的第一个或者最后一个元素:

golang使用mongo-爱代码爱编程

不管任何数据库,查都是最复杂的操作。 基本查询,并且解析成结构体: // 最基本的查询,一个查询条件即可,参考:https://www.mongodb.com/docs/manual/tutorial/query-doc