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!
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!
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!