首页 > 后端开发 > Golang > 更新 mongdbo 文档中的数组

更新 mongdbo 文档中的数组

王林
发布: 2024-02-09 14:18:19
转载
918 人浏览过

更新 mongdbo 文档中的数组

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 文档中的数组的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:stackoverflow.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板