在调用updateOne时,我们如何获取响应中的更新文档?

huangapple go评论75阅读模式
英文:

How can we get the updated document in response on calling updateOne

问题

以下是我想要更新某个id的json文档:

{
    "_id": "some_id",
    "counter": {
        "$incr": 1,
    },
}

使用上述bson进行更新后,借助库(github.com/mongodb/mongo-go-driver),它将在集合中将字段counter的计数器值增加1。

如何在不再次查询或获取锁的情况下获取更新后的结果?

英文:

Below is the json document that i want to update for some id

{
    "_id": "some_id",
    "counter": {
        "$incr": 1,
    },
}

after using the above bson for update with the help of library (github.com/mongodb/mongo-go-driver) it will increment the counter value by 1 in the collection for the field counter.

How can I get the updated result without querying again, or without acquiring a lock?

答案1

得分: 2

你可以使用findOneAndUpdate命令,并设置选项在更新执行后返回文档。

查询:

err = collection.FindOneAndUpdate(
		ctx,
		bson.D{},  // <- 查找块
		bson.D{{
			"$inc", bson.D{{  // <- 更新块
				"counter", 1,
			}},
		}},
		options.FindOneAndUpdate().SetReturnDocument(options.After),  // <- 设置选项以在更新后返回文档(重要)
	).Decode(&result)  // <- 将文档保存到变量中
英文:

You can make use of the findOneAndUpdate command and set option to return documents after the update is performed.

Query:

err = collection.FindOneAndUpdate(
		ctx,
		bson.D{},  // &lt;- Find block
		bson.D{{
			&quot;$inc&quot;, bson.D{{  // &lt;- update block
				&quot;counter&quot;, 1,
			}},
		}},
		options.FindOneAndUpdate().SetReturnDocument(options.After),  // &lt;- Set option to return document after update (important)
	).Decode(&amp;result)  // &lt;- Save document to variable

答案2

得分: 0

从文档中

您应该将新选项设置为true,以便在应用更新后返回文档。

 Character.findOneAndUpdate(filter, update, { new: true });
英文:

From documentation

You should set the new option to true to return the document after update was applied.

 Character.findOneAndUpdate(filter, update, { new: true });

huangapple
  • 本文由 发表于 2021年11月29日 21:14:05
  • 转载请务必保留本文链接:https://go.coder-hub.com/70155280.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定