【发布时间】:2016-01-13 03:13:40
【问题描述】:
我是 mongodb 和 golang 的新手。在我的一个项目中,我想将 mongo 与 go 连接起来。我正在使用 mgo.v2 驱动程序将 mongo 与 go 连接起来。我的问题是: 如何自动增加文档的 _id 字段,以便每当我尝试执行 POST 操作时,它应该自动增加文档的 _id 字段? 我想实现类似于“FindAndModify”功能的东西,但我在 go 中看不到这个功能。 这就是我想尝试的。 Auto increment id in mongodb
type count struct {
ID string `bson:"_id"`
Seq int `bson:"seq"`
}
var doc count
func get NextSequence(name string) int{
change := mgo.Change{
Update: collection.Update(count{ID: "userid"}, bson.M{"$inc": count{Seq: 1}}),
ReturnNew: true,
}
_, err1 := collection.Find(bson.M{}).Apply(change, &doc)
return doc.Seq
}
func main(){
fmt.Println(getNextSequence("userid"))
fmt.Println(getNextSequence("userid"))
doc2 := msg{ID: getNextSequence("userid"), Name: "Sarah"}
doc3 := msg{ID: getNextSequence("userid"), Name: "Sarah2"}
}
我尝试了上面的代码,但 Seq 的值似乎没有增加。每次我调用该函数时,它都会给我 0。 感谢您的帮助。
【问题讨论】:
-
MongoDB 中的自动递增往往是一种不好的做法,因为它不能很好地扩展。这有点违背了使用它的目的。默认不是自动递增的主键值是有原因的。您有什么想法想要实现,只能通过自动递增 id 来实现?
-
我完全同意@WillC。此外:
_id是不可变的。当您“更改”它时,您实际上是创建了一个新文档。如果您确实需要计数器(例如用于乐观锁定),您应该在 not_id的字段上使用$inc运算符。