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



