Mongodb 使用FindAndModify在官方Mongo Go驱动程序中运行查询
在社区驱动的Go Mongo驱动程序(即Mgo)中,我们可以使用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
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
操作