根据文档(http://godoc.org/launchpad.net/mgo/v2),如果使用Upsert方法,则可以获取"Upserted"文档的ID .
还有一个不提供此功能的Insert方法 .
这是为什么?如果我想执行Insert而不是Upsert怎么办? (或者不会开始怀疑 . )
根据文档(http://godoc.org/launchpad.net/mgo/v2),如果使用Upsert方法,则可以获取"Upserted"文档的ID .
还有一个不提供此功能的Insert方法 .
这是为什么?如果我想执行Insert而不是Upsert怎么办? (或者不会开始怀疑 . )
3 回答
你使用bson . NewObjectId()生成要插入的ID .
这是您插入新文档的方式:
由于您在发出
Upsert
时不会插入或更新,因此仅在查询后立即生成ID(如果发生更新)将是多余的 . 's why it'生成了db-side并在适用时返回给您 .这根本不应该发生,mgo应该插入并返回Id,因为,如果我们从应用程序本身生成ObjectId,如果应用程序重新启动,Object Id生成器将从头开始一次又一次生成相同的ID ,从而更新数据库中的现有记录 .
这是错误的,MGO应该依赖数据库来生成这些ID并更新对象或立即返回插入对象的objectId,就像在Python或Java中绑定到MongoDB的其他语言一样 .
您始终可以尝试使用Upsert函数来获取生成的ID .
这是我的示例代码,工作正常.....