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
Freigeben: 2024-02-08 22:48:22
nach vorne
722 Leute haben es durchsucht

从另一个相同类型的数组向数组添加新值 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"`
}
Nach dem Login kopieren

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

}
Nach dem Login kopieren

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
Nach dem Login kopieren

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())
Nach dem Login kopieren

für

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

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage