我正在使用todo
和golang
创建一个简单的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
?还是这个驱动程序还不够开发呢?
谢谢。