我想要这样的东西:在 mongo db 中找到一条记录 old_record将此记录更新为 new_record返回 old_record我写这样的代码:ret = nil// First, Find the objobj := &orm.QuerySetObj{}err2 := this.querySetCollection.With(session).Find(objKey).One(obj)if nil != err2 { this.logger.Println("Error find obj") return}ret = obj// Then, update this objobj.updateTime = time.Now().Unix()err3 := this.querySetCollection.With(session).Upsert(objKey, obj)if nil != err3 { this.logger.Println("Error update obj") return}return但是,我认为find并且update应该是一个atomic操作,所以我的代码并不安全。我怎样才能在原子操作中做到这一点
1 回答
翻过高山走不出你
TA贡献1875条经验 获得超3个赞
这里的方法是.Apply()采用Change类型并返回ChangeInfo。
文档中的直接示例:
change := mgo.Change{
Update: bson.M{"$inc": bson.M{"n": 1}},
ReturnNew: false,
}
info, err = col.Find(M{"_id": id}).Apply(change, &doc)
fmt.Println(doc.N)
哪里doc是被发现的文件,并根据价值它的状态ReturnNew在Change争论,是false要将原来的文档。
基本上所有参数的形式都与 .findAndModify()
- 1 回答
- 0 关注
- 303 浏览
添加回答
举报
0/150
提交
取消