当前位置: 首页 > 工具软件 > iD > 使用案例 >

Golang操作mongo中_id与id问题

孟晋
2023-12-01

在写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字段。

 类似资料: