Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Tambahkan nilai baharu pada tatasusunan daripada tatasusunan lain jenis MongoDB-GO yang sama

Tambahkan nilai baharu pada tatasusunan daripada tatasusunan lain jenis MongoDB-GO yang sama

WBOY
WBOYke hadapan
2024-02-08 22:48:22683semak imbas

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

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!

Kandungan soalan

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!

Penyelesaian

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam