猿问

如何使用golang在mongodb中findAndModify一条记录?

我想要这样的东西:

  1. 在 mongo db 中找到一条记录 old_record

  2. 将此记录更新为 new_record

  3. 返回 old_record

我写这样的代码:

ret = nil

// First, Find the obj

obj := &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 obj

obj.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操作,所以我的代码并不安全。


我怎样才能在原子操作中做到这一点


九州编程
浏览 307回答 1
1回答

翻过高山走不出你

这里的方法是.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()
随时随地看视频慕课网APP

相关分类

Go
我要回答