Maison >développement back-end >Golang >Mettre à jour le tableau dans le document 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.
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"
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!