
php小编鱼仔在本文中将向大家介绍如何在MongoDB的文档中更新数组。MongoDB是一种非关系型数据库,它的文档结构非常灵活,可以包含各种类型的数据,包括数组。在实际的开发中,我们经常需要对存储在数组中的数据进行更新操作。本文将详细讲解如何使用MongoDB的更新操作符来更新文档中的数组,以及一些常见的使用场景和注意事项。无论你是刚刚接触MongoDB还是已经有一定经验的开发者,都能从本文中获得有益的知识和实践经验。
我正在尝试更新 mongo 文档中的数组项。
event 是文档,我通过事件 id 找到它,然后我需要通过识别任务名称来识别任务数组中的哪个对象需要更改。
知道我哪里出错了
事件结构
本系统经过多次升级改造,系统内核经过多次优化组合,已经具备相对比较方便快捷的个性化定制的特性,用户部署完毕以后,按照自己的运营要求,可实现快速定制会费管理,支持在线缴费和退费功能财富中心,管理会员的诚信度数据单客户多用户登录管理全部信息支持审批和排名不同的会员级别有不同的信息发布权限企业站单独生成,企业自主决定更新企业站信息留言、询价、报价统一管理,分系统查看分类信息参数化管理,支持多样分类信息,
0
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 文档中的数组的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号