在Go的社区驱动的Mongo驱动程序中,即Mgo,我们可以使用Apply
API调用来运行涉及$set
或$inc
的MongoDB查询。 Mgo中此用例的示例如下:
change := mgo.Change{
Update: bson.M{"$set": bson.M{"phone": "+55 53 8402 8510"}},
ReturnNew: true,
}
_, err = MongoSession.DB("test").C("people").Find(bson.M{"_id": a}).Apply(change, &result)
为此API调用引用官方documentation:
Apply运行findAndModify MongoDB命令,该命令允许更新, 升级或删除原子匹配查询的文档 返回旧版本(默认)或新版本的 文档(当ReturnNew为true时)。
我目前正在将项目从Mgo移植到official Mongo Go driver。但是,我找不到任何运行findAndModify命令的方法来实现类似的用例。要用官方驱动程序中的相关方法替换Apply API,推荐的方法是什么?
我已经考虑过检查现有代码中“更新”下的查询,并手动使用官方驱动程序中提供的查找/更新/替换方法。但是,有没有更好的方法可以做到这一点呢?
答案 0 :(得分:1)
我能够使用FindOneAndUpdate API解决此问题。
它在内部使用Environment
,即使在文档中未明确提及。我用来在Go的Mongo驱动程序中模仿Mgo的此功能的代码如下:
@EnabledIf(expression = "#{environment.acceptsProfiles('test', 'someotherprofile')}", loadContext = true)