Maison >développement back-end >Golang >Mettre à jour le tableau dans le document mongdbo

Mettre à jour le tableau dans le document mongdbo

王林
王林avant
2024-02-09 14:18:19921parcourir

更新 mongdbo 文档中的数组

L'éditeur php Yuzai vous présentera comment mettre à jour les tableaux dans les documents MongoDB dans cet article. MongoDB est une base de données non relationnelle dont la structure documentaire est très flexible et peut contenir différents types de données, notamment des tableaux. Dans le développement réel, nous devons souvent mettre à jour les données stockées dans le tableau. Cet article expliquera en détail comment utiliser l'opérateur de mise à jour de MongoDB pour mettre à jour le tableau dans le document, ainsi que certains scénarios d'utilisation courants et précautions. Que vous soyez nouveau sur MongoDB ou développeur expérimenté, vous pouvez acquérir des connaissances utiles et une expérience pratique grâce à cet article.

Contenu de la question

J'essaie de mettre à jour un élément de tableau dans un document mongo.

event est le document, je le trouve par l'identifiant de l'événement, puis je dois identifier quel objet du tableau des tâches doit être modifié en identifiant le nom de la tâche.

Sachez où je me suis trompé

Structure de l'événement

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"`
}

Structure des tâches :

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"`
}

C'est ce que je veux faire

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

}

Je reçois constamment "Aucun document correspondant trouvé à mettre à jour"

Solution

C'est la solution

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
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer