Rumah > pembangunan bahagian belakang > Golang > 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
Lepaskan: 2024-02-08 22:48:22
ke hadapan
748 orang telah melayarinya

从另一个相同类型的数组向数组添加新值 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"`
}
Salin selepas log masuk

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

}
Salin selepas log masuk

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
Salin selepas log masuk

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())
Salin selepas log masuk

untuk

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

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan