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

how can I findAndModify one record in mongodb with golang?

我想要这样的东西:

  1. 在 mongo 数据库中找到一条记录 old_record
  2. 更新此记录为new_record
  3. return 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() which takes a Change type and returns 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()

相同