editor php Yuzai di sini untuk memperkenalkan kepada anda kaedah menambah nilai baharu pada tatasusunan daripada tatasusunan lain daripada jenis yang sama, iaitu operasi dalam MongoDB-GO. Kaedah ini boleh membantu pembangun mengubah suai dan mengemas kini tatasusunan dengan lebih mudah dan meningkatkan kecekapan pembangunan. Di bawah ini kami akan memperkenalkan langkah-langkah khusus dan teknik penggunaan kaedah ini secara terperinci Kami berharap ia akan membantu semua orang!
Saya sedang menggunakan pemacu mongodb pada golang dan cuba menambah medan pada tatasusunan dokumen daripada tatasusunan input jenis yang sama:
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"` }
Secara khusus, saya cuba menambahkan nilai daripada tatasusunan ahli kepada nilai daripada dokumen. Inilah fungsi yang saya gunakan sekarang:
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 }
Daripada log saya menyemak bahawa tatasusunan id dan ahli input berada dalam format yang betul. Tetapi saya mendapat ralat ini:
http: panic serving 172.23.0.4:42426: interface conversion: interface {} is nil, not primitive.ObjectID
Saya rasa ralat adalah dalam cara saya mentakrifkan operasi kemas kini, tetapi saya tidak dapat mencari penyelesaian.
Sebarang bantuan akan sangat dihargai, terima kasih terlebih dahulu!
Nampaknya ralat datang dari *mongo.updateresult
类型中的 upsertedid
. Atas sebab tertentu id yang dikembalikan adalah sifar.
Ubah
// get newly updated result updatedorg, _ := o.getone(result.upsertedid.(primitive.objectid).hex())
untuk
// get newly updated result updatedOrg, _ := o.GetOne(organizationID)
Berjaya.
Atas ialah kandungan terperinci Tambahkan nilai baharu pada tatasusunan daripada tatasusunan lain jenis MongoDB-GO yang sama. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!