Heim >Backend-Entwicklung >Golang >Array im Mongdbo-Dokument aktualisieren

Array im Mongdbo-Dokument aktualisieren

王林
王林nach vorne
2024-02-09 14:18:19921Durchsuche

更新 mongdbo 文档中的数组

Der PHP-Editor Yuzai stellt Ihnen in diesem Artikel vor, wie Sie Arrays in MongoDB-Dokumenten aktualisieren. MongoDB ist eine nicht relationale Datenbank, deren Dokumentstruktur sehr flexibel ist und verschiedene Datentypen, einschließlich Arrays, enthalten kann. In der tatsächlichen Entwicklung müssen wir häufig die im Array gespeicherten Daten aktualisieren. In diesem Artikel wird ausführlich erläutert, wie der Update-Operator von MongoDB zum Aktualisieren des Arrays im Dokument verwendet wird, sowie einige häufige Verwendungsszenarien und Vorsichtsmaßnahmen. Unabhängig davon, ob Sie MongoDB-Neuling oder ein erfahrener Entwickler sind, können Sie in diesem Artikel nützliches Wissen und praktische Erfahrungen sammeln.

Frageninhalt

Ich versuche, ein Array-Element in einem Mongo-Dokument zu aktualisieren.

Ereignis ist das Dokument, ich finde es anhand der Ereignis-ID. Anschließend muss ich anhand des Aufgabennamens ermitteln, welches Objekt im Aufgabenarray geändert werden muss.

Wissen Sie, was ich falsch gemacht habe

Event-Struktur

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

Aufgabenstruktur:

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

Das ist es, was ich tun möchte

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

}

Ich erhalte ständig die Meldung „Kein passendes Dokument zum Aktualisieren gefunden“

Lösung

Das ist die Lösung

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
}

Das obige ist der detaillierte Inhalt vonArray im Mongdbo-Dokument aktualisieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen