我想要這樣的東西:在 mongo db 中找到一條記錄 old_record將此記錄更新為 new_record返回 old_record我寫(xiě)這樣的代碼: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但是,我認(rèn)為find并且update應(yīng)該是一個(gè)atomic操作,所以我的代碼并不安全。我怎樣才能在原子操作中做到這一點(diǎn)
1 回答

翻過(guò)高山走不出你
TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊
這里的方法是.Apply()采用Change類(lèi)型并返回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是被發(fā)現(xiàn)的文件,并根據(jù)價(jià)值它的狀態(tài)ReturnNew在Change爭(zhēng)論,是false要將原來(lái)的文檔。
基本上所有參數(shù)的形式都與 .findAndModify()
- 1 回答
- 0 關(guān)注
- 325 瀏覽
添加回答
舉報(bào)
0/150
提交
取消