Heim >Backend-Entwicklung >Golang >Fügen Sie dem Array einen neuen Wert aus einem anderen Array desselben Typs MongoDB-GO hinzu

Fügen Sie dem Array einen neuen Wert aus einem anderen Array desselben Typs MongoDB-GO hinzu

WBOY
WBOYnach vorne
2024-02-08 22:48:22724Durchsuche

从另一个相同类型的数组向数组添加新值 MongoDB-GO

php-Editor Yuzai ist hier, um Ihnen eine Methode zum Hinzufügen neuer Werte zu einem Array aus einem anderen Array desselben Typs vorzustellen, d. h. eine Operation in MongoDB-GO. Diese Methode kann Entwicklern helfen, Arrays bequemer zu ändern und zu aktualisieren und die Entwicklungseffizienz zu verbessern. Im Folgenden stellen wir die spezifischen Schritte und Verwendungstechniken dieser Methode im Detail vor. Wir hoffen, dass sie für alle hilfreich ist!

Frageninhalt

Ich verwende derzeit den Mongodb-Treiber auf Golang und versuche, aus einem Eingabearray desselben Typs ein Feld zu einem Dokumentarray hinzuzufügen:

type organization struct {
    id string `bson:"_id,omitempty" json:"id,omitempty" `
    name string `bson:"name,omitempty" json:"name,omitempty" validate:"required"`
    members []member `bson:"members,omitempty" json:"members,omitempty" validate:"required"`
    owner string `bson:"owner,omitempty" json:"owner,omitempty" validate:"required"`
    createdat *time.time `bson:"created_at,omitempty" json:"created_at,omitempty"`
    updatedat *time.time `bson:"updated_at,omitempty" json:"updated_at,omitempty"`
}

type member struct {
    userid string `bson:"user_id" json:"user_id" validate:"required"`
    permissions []string `bson:"permissions" json:"permissions" validate:"required"`
    addedby string `bson:"added_by" json:"added_by" validate:"required"`
    status string `bson:"status" json:"status" validate:"required"`
    addedat time.time `bson:"added_at" json:"added_at"`
}

Konkret versuche ich, einen Wert aus einem Member-Array an einen Wert aus dem Dokument anzuhängen. Dies ist die Funktion, die ich derzeit verwende:

func (o *organization) addmembers (organizationid string, members []member ) (*organization, error){
    // if it doesn't exists it will be created
    collection := client.database("app-data").collection("organizations")

    log.println("[app-data-db:add-members] requested new add members: ", members, organizationid)

    change := bson.m{
        "$push": bson.m {
            "members": bson.m{"$each": members},
        },
    }

    id, err := primitive.objectidfromhex(organizationid)
    if err != nil{
        log.println("[app-data-db:add-members] cannot convert to primitive: ", id, organizationid)
        return nil, err
    }

    filter := bson.d{{"_id", id}}

    result, err := collection.updateone(context.todo(), filter, change)
    if err != nil {
        return nil, err
    }

    // get newly updated result
    updatedorg, _ := o.getone(result.upsertedid.(primitive.objectid).hex())

    return updatedorg, nil

}

Anhand der Protokolle habe ich überprüft, ob die ID- und Input-Member-Arrays das richtige Format haben. Aber ich habe diesen Fehler erhalten:

http: panic serving 172.23.0.4:42426: interface conversion: interface {} is nil, not primitive.ObjectID

Ich schätze, der Fehler liegt in der Art und Weise, wie ich den Aktualisierungsvorgang definiere, aber ich konnte keine Lösung finden.

Jede Hilfe wäre sehr dankbar, vielen Dank im Voraus!

Problemumgehung

Sieht aus, als ob der Fehler von *mongo.updateresult 类型中的 upsertedid stammt. Aus irgendeinem Grund ist die zurückgegebene ID Null.

Veränderung

// get newly updated result
    updatedorg, _ := o.getone(result.upsertedid.(primitive.objectid).hex())

für

// get newly updated result
    updatedOrg, _ := o.GetOne(organizationID)

Erfolgreich.

Das obige ist der detaillierte Inhalt vonFügen Sie dem Array einen neuen Wert aus einem anderen Array desselben Typs MongoDB-GO hinzu. 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