我想要這樣的東西:在 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 關注
- 319 瀏覽
添加回答
舉報
0/150
提交
取消