php小编鱼仔在本文中将向大家介绍如何在MongoDB的文档中更新数组。MongoDB是一种非关系型数据库,它的文档结构非常灵活,可以包含各种类型的数据,包括数组。在实际的开发中,我们经常需要对存储在数组中的数据进行更新操作。本文将详细讲解如何使用MongoDB的更新操作符来更新文档中的数组,以及一些常见的使用场景和注意事项。无论你是刚刚接触MongoDB还是已经有一定经验的开发者,都能从本文中获得有益的知识和实践经验。
问题内容
我正在尝试更新 mongo 文档中的数组项。
event 是文档,我通过事件 id 找到它,然后我需要通过识别任务名称来识别任务数组中的哪个对象需要更改。
知道我哪里出错了
事件结构
type event struct {
eventid string `json:"eventid" bson:"eventid"`
eventowner string `json:"eventowner" bson:"eventowner"`
eventtitle string `json:"eventtitle" bson:"eventtitle"`
eventdatetime string `json:"eventdatetime" bson:"eventdatetime"`
eventlocation eventaddress `json:"eventlocation" bson:"eventlocation"`
eventtotalticket int `json:"eventtotalticket" bson:"eventtotalticket"`
eventavailableticket int `json:"eventavailableticket" bson:"eventavailableticket"`
eventcoverimage string `json:"eventcoverimage" bson:"eventcoverimage"`
eventdescription string `json:"eventdescription" bson:"eventdescription"`
lat string `json:"lat" bson:"lat"`
long string `json:"long" bson:"long"`
task []task `json:"task" bson:"task"`
}
任务结构:
type task struct {
tasktitle string `json:"tasktitle" bson:"tasktitle"`
initalbudget float32 `json:"initialbudget" bson:"initialbudget"`
supplier string `json:"suppid" bson:"suppid"`
agreedprice float32 `json:"agreedprice" bson:"agreedprice"`
iscomplete bool `json:"iscomplete" bson:"iscomplete"`
}
这就是我想做的
func (e *EventServiceImpl) UpdateTask(eventid *string, task *models.Task) error {
//filter := bson.D{bson.E{Key: "eventid", Value: eventid}, bson.E{Key: "tasktitle", Value: task.TaskTitle}}
filter := bson.M{"$and": []bson.M{{"eventid": eventid}, {"task": bson.E{Key: "tasktitle", Value: task.TaskTitle}}}}
update := bson.D{bson.E{Key: "$set", Value: bson.D{bson.E{Key: "task", Value: bson.M{"tasktitle": task.TaskTitle, "initialbudget": task.InitalBudget, "suppid": task.Supplier, "agreedprice": task.AgreedPrice, "iscomplete": task.IsComplete}}}}}
result, _ := e.eventcollection.UpdateOne(e.ctx, filter, update)
if result.MatchedCount != 1 {
return errors.New("No matched document found to update")
}
return nil
}
我总是收到“找不到要更新的匹配文档”
解决方法
这是解决方案
func (e *EventServiceImpl) UpdateTask(eventid *string, task *models.Task) error {
filter := bson.M{"eventid": eventid, "task": bson.M{"$elemMatch": bson.M{"tasktitle": task.TaskTitle}}}
update := bson.M{"$set": bson.M{"task.$.initialbudget": task.InitalBudget, "task.$.suppid": task.Supplier, "task.$.agreedprice": task.AgreedPrice, "task.$.iscomplete": task.IsComplete}}
result, err := e.eventcollection.UpdateOne(e.ctx, filter, update)
if err != nil {
return err
}
if result.MatchedCount != 1 {
return errors.New("No matched document found to update")
}
return nil
}
以上就是更新 mongdbo 文档中的数组的详细内容,更多请关注编程网其它相关文章!