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

Mongodb 使用FindAndModify在官方Mongo Go驱动程序中运行查询,mongodb,go,mgo,mongo-go,Mongodb,Go,Mgo,Mongo Go,在社区驱动的Go Mongo驱动程序(即Mgo)中,我们可以使用ApplyAPI调用来运行涉及$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

在社区驱动的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调用的官方消息:

Apply运行findAndModify MongoDB命令,该命令允许更新, 以原子方式升级或删除与查询匹配的文档 返回旧版本(默认)或新版本的 文档(ReturnNew为true时)

我目前正在将一个项目从移植到。但是,我找不到任何运行findAndModify命令来实现类似用例的方法。要用官方驱动程序提供的相关方法替换Apply API,建议采用什么方法


我考虑过在现有代码中的“Update”下检查查询,并手动使用官方驱动程序中提供的Find/Update/Replace方法。但是,有没有更好的方法可以做到这一点

我能够使用API解决这个问题

它在内部使用
find和modify
,即使文档中没有明确提到它。我在Go的Mongo驱动程序中用于模拟Mgo的此功能的代码如下:

MongoSession, err := mongo.NewClient(options.Client().ApplyURI("mongodb://localhost:27017"))
if err != nil {
    panic(err)
}
ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
err = MongoSession.Connect(ctx)
collection := MongoSession.Database("test").Collection("people")
a, err := primitive.ObjectIDFromHex("XXXXXXXXXX") //hiding hex value
b := collection.FindOneAndUpdate(ctx, bson.M{"_id": a}, bson.M{"$set": bson.M{"phone": "Replacing using the query"}})
编辑(29/02/20):看起来在回答这个问题之后,MongoDB工程师已经更新了关于正在使用的MongoDB功能的信息。文档现在说明
FindOneAndUpdate
使用
findanddomify
操作