我想更新数据库中的一些字段,并希望它返回一些字段,你能建议如何检索返回字段吗?所以我在这里使用,returnFields := map[string]interface{}{"order_id":1} data := FindAndUpdateVerticalsOffers(updateQuery, updateFields, returnFields)如何从“data”获取order_id:func FindAndUpdateVerticalsOffers(updateQuery map[string]interface{}, updateFields interface{}, returnFields map[string]interface{}) map[string]interface{} { session := db.GetSession() defer session.Close() collection := session.DB("").C(VerticalsOffersName) updateSet := bson.M{"$set": updateFields} return collection.FindOneAndUpdate(updateQuery, updateSet, returnFields)}
查看完整描述
TA贡献1725条经验 获得超7个赞
我想更新数据库中的一些字段并希望它返回一些字段,
如果您使用mongo-go-driver(当前为 v1.1),您可以使用FindOneAndUpdate()来查找单个文档并更新它,返回原始文档或更新后的文档。
该方法接受FindOneAndUpdateOptions的参数,它支持投影。例如:
collection := client.Database("dbName").Collection("collName")
// Sets projection (or return fields)
findUpdateOptions := options.FindOneAndUpdateOptions{}
findUpdateOptions.SetProjection(bson.M{"order_id": 1})
result := collection.FindOneAndUpdate(context.TODO(),
bson.M{"foo":1},
bson.M{"$set": bson.M{"bar":1}},
&findUpdateOptions)
doc := bson.M{}
err = result.Decode(&doc)
上面的查询将匹配字段
foo
为 1 的文档,将字段更新为 1,并仅作为结果
bar
返回。
order_id
请注意,默认情况下
_id
也会返回该字段。您可以通过将_id 字段设置为 0 来禁止投影。
请注意,返回类型
FindOneAndUpdate
是SingleResult对象,它表示从操作返回的单个文档。如果操作返回错误,则
Err
SingleResult 的方法将返回该错误。
查看完整回答