ObjectID自动设置为";0…0“;与官方mongoDB驱动程序配合使用

ObjectID自动设置为";0…0“;与官方mongoDB驱动程序配合使用,mongodb,go,Mongodb,Go,我正在尝试使用Go将用户条目保存到MongoDB数据库中。用户应该自动获得ID。我用的是官方的MongoDB Go驱动程序 我的消息来源特别可靠 结构如下所示: 类型用户结构{ ID primitive.ObjectID`json:“\u ID”bson:“\u ID”` Fname字符串`json:“Fname”bson:“Fname”` Lname字符串`json:“Lname”bson:“Lname”` 邮件字符串`json:“邮件”bson:“邮件”` 密码字符串`json:“Passw

我正在尝试使用Go将用户条目保存到MongoDB数据库中。用户应该自动获得ID。我用的是官方的MongoDB Go驱动程序

我的消息来源特别可靠

结构如下所示:

类型用户结构{
ID primitive.ObjectID`json:“\u ID”bson:“\u ID”`
Fname字符串`json:“Fname”bson:“Fname”`
Lname字符串`json:“Lname”bson:“Lname”`
邮件字符串`json:“邮件”bson:“邮件”`
密码字符串`json:“Password”bson:“Password”`
Street字符串`json:“Street”bson:“Street”`
Zip字符串`json:“Zip”bson:“Zip”`
城市字符串`json:“城市”bson:“城市”`
国家/地区字符串`json:“国家/地区”bson:“国家/地区”`
}
设置数据库(连接工作)并注册用户(基于HTTP请求
r
,其中包含用户):

ctx:=context.Background()
uriDB:=“someURI”
clientOptions:=options.Client().ApplyURI(uriDB)
客户端,错误:=mongo.Connect(ctx,clientOptions)
集合:=客户机.数据库(“guDB”).集合(“用户”)
...
var用户
err:=json.NewDecoder(r.Body.Decode)(&user)
ctx,cancel:=context.WithTimeout(context.Background(),10*time.Second)
推迟取消
结果,错误:=collection.InsertOne(ctx,用户)
...
当我输入第一个用户时,它被添加到集合中,但ID如下所示:
\u id:ObjectID(000000000000000000000000000000000000)

如果现在要输入另一个用户,则会出现以下错误:

multiple write errors: [{write errors: [{E11000 duplicate key error collection: guDB.users index: _id_ dup key: { : ObjectId('000000000000000000000000') }}]}, {<nil>}]
多个写入错误:[{write errors:[{E11000重复键错误集合:guDB.users索引:{u id_u-dup-key:{:ObjectId('000000000000000000000000000000')}]},{}]
因此,似乎再次分配了ObjectID
000000000000000000000000000000

我希望每个条目的ID自动设置为唯一值


我是否必须手动设置ID,或者如何为用户分配唯一ID?

如果设置文档ID,mongodb将在插入过程中为文档使用该ID,并且不会生成。您必须忽略它,或者使用primitive.NewObjectID()手动设置它。

\,错误:=col.InsertOne(ctx和Post{

ID:primitive.NewObjectID(),//Does
err:=json.NewDecoder(r.Body).Decode(&user)
“重新填充”(即在不创建新对象的情况下填充)目标。看起来是这样的。在这种情况下,第一次通过时,驱动程序分配ID,一切正常。但第二次和后续时间,ID已填充,因此您会出现重复错误。插入后,您必须手动从对象中取出ID。
_, err := col.InsertOne(ctx, &Post{
    ID:        primitive.NewObjectID(),    // <-- this line right here
    Title:     "post",
    Tags:      []string{"mongodb"},
    Body:      `blog post`,
    CreatedAt: time.Now(),
})