gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:24:35 32 4
gpt4 key购买 nike

我想要这样的东西:

  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

但是,我认为 findupdate 应该是 atomic 操作,所以我的代码不安全。

如何在原子操作中做到这一点

最佳答案

这里的方法是.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 的值,即 false 你想要原始文档的地方。

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

关于mongodb - 如何使用golang在mongodb中findAndModify一条记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31937292/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com