mongodb之定义ID int64时如何自动生成ID int64 `bson:“_id”`

kevingrace 阅读:47 2025-06-02 22:19:02 评论:0

假设您有一个简单的结构

type User struct { 
    ID              uint64    `json:"id" bson:"_id"` 
    UserName        string    `json:"user_name" bson:"userName"` 
    Email           string    `json:"email" bson:"email"` 
} 
 
u := User{ 
    userName: "me", 
    Email:    "me@mail.com" 
} 
我试图像这样在MongoDB集合中插入此对象:
r, err := collection.InsertOne(context.TODO(), u) 
此处的 ID字段的值为0,因为我未指定值。
问题在于MongoDB不会自动生成 _id字段,而是将值设置为等于0,这很合逻辑,但不是我想要的结果。
有没有一种方法可以使用这种方法自动生成 _id

请您参考如下方法:

您应该在omitempty上使用ID标记。

type User struct { 
    ID              primitive.ObjectID    `json:"id" bson:"_id,omitempty"` 
    UserName        string    `json:"user_name" bson:"userName"` 
    Email           string    `json:"email" bson:"email"` 
} 
如果未指定 omitepmty标记,则行为与 Go structs上指定的相同;因此,如果省略任何struct字段,它将为零值。
在这种情况下,由于您将字段类型指定为 primitive.ObjectID,因此 ObjectId('000000000000000000000000')为零值。
因此,在创建结构时需要生成一个ID:
collection.InsertOne(context.TODO(),  
                     User{ ID: primitive.NewObjectID(),  
                           UserName: "me",  
                           Email: "me@mail.com"}) 


标签:mongodb
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号