使用FindAndModify在官方的Mongo Go驱动程序中运行查询

时间:2019-04-17 10:19:40

标签: mongodb go mgo mongo-go

在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,推荐的方法是什么?

我已经考虑过检查现有代码中“更新”下的查询,并手动使用官方驱动程序中提供的查找/更新/替换方法。但是,有没有更好的方法可以做到这一点呢?

1 个答案:

答案 0 :(得分:1)

我能够使用FindOneAndUpdate API解决此问题。

它在内部使用Environment,即使在文档中未明确提及。我用来在Go的Mongo驱动程序中模仿Mgo的此功能的代码如下:

@EnabledIf(expression = "#{environment.acceptsProfiles('test', 'someotherprofile')}", loadContext = true)