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