Golang/mgo:为什么mgo不返回插入文档的ID?

Seb*_*oli 25 go mongodb mgo

根据文档(http://godoc.org/launchpad.net/mgo/v2)如果您使用的Upsert方法,你可以得到你的"Upserted"文件的ID.

还有一个不提供此功能的Insert方法.
这是为什么?如果我想执行Insert而不是Upsert怎么办?(或者永远不会有任何正当理由想要这样做?我开始怀疑.)

thw*_*hwd 46

你用bson.NewObjectId()生成要插入的ID.

这是您插入新文档的方式:

i := bson.NewObjectId()
c.Insert(bson.M{"_id": i, "foo": "bar"})
Run Code Online (Sandbox Code Playgroud)

由于您在发布时不知道是否要插入或更新Upsert,因此仅在查询后立即生成ID(如果发生更新)将是多余的.这就是它生成db-side并在适用时返回给你的原因.

  • "如果重新启动应用程序,Object Id生成器将从头开始一次又一次地生成相同的ID,从而更新数据库中的现有记录." 这张贴在第二个答案上,非常重要,答案中没有提到.我想你应该编辑答案,为将来的人们添加这些信息. (3认同)
  • 我怎么能用我已经创建的结构替换"foo":"bar"? (2认同)