官方mongo-go-driver findOneAndUpdate使用struct

时间:2018-11-14 10:23:58

标签: mongodb rest api go

我正在使用todogolang创建一个简单的mongodb rest API。我也在使用mongo-go-driver库。

基本上,我设法将数据上传到mongodb,并且能够检索信息,但是当我尝试使用findOneAndUpdate函数时遇到了一些问题。我可以使用findOneAndReplace更新数据,但是,我想使用结构和findOneAndUpdate函数更新信息

这是我的结构:

type Todo struct {
   ObjectId string
   ID       string `json:"ID,omitempty"`
   Title    string `json:"Title,omitempty" bson:"Title"`
   Category string `json:"Category,omitempty" bson:"Category"`
   Content  string `json:"Content,omitempty" bson:"Content"`
   Created  string `json:"Creation_time,omitempty" bson:"Creation_time"`
   Modified string `json:"Modification_time,omitempty" bson:"Modification_time"`
   State    string `json:"State,omitempty" bson:"State"`

}

这是将我的请求正文解码为结构的函数:

func UpdateTodo (w http.ResponseWriter, r *http.Request){
var todo models.Todo
_ = json.NewDecoder(r.Body).Decode(&todo)
urlTodoId := chi.URLParam(r, "id")
UpdateTodoById(todo, urlTodoId)

}

最后是更新数据的功能:

func UpdateTodoById(todo m.Todo, todoId string) interface{}{

var todoUpdated m.Todo

objId, err := objectid.FromHex(todoId)
helpers.PanicErr(err)
filter := bson.NewDocument(bson.EC.ObjectID("_id", objId))
fmt.Println(filter)

err = db.Collection(COLLNAME).FindOneAndUpdate(context.Background(), filter, todo).Decode(&todoUpdated)
fmt.Println(todoUpdated)
helpers.PanicErr(err)

return  todoUpdated}

我发送请求时收到错误消息:update document must contain key beginning with '$

那么有人可以帮忙吗?有办法解决吗?并使用结构更新数据找到函数findOneAndUpdate?还是这个驱动程序还不够开发呢?

谢谢。

0 个答案:

没有答案