加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何使用golang在mongodb中找到并修改一条记录?

发布时间:2020-12-16 19:04:18 所属栏目:大数据 来源:网络整理
导读:我想要这样的东西: 在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
我想要这样的东西:

>在mongo db old_record中找到一条记录
>将此记录更新为new_record
>返回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

但是,我认为查找和更新应该是一个原子操作,所以我的代码不安全.

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

这里的方法是 .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是找到的文档,并且它的状态取决于Change参数中ReturnNew的值,在您想要原始文档的位置为f??alse.

基本上所有参数都与.findAndModify()的形式相同

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读