首頁  >  文章  >  後端開發  >  從另一個相同類型的陣列向數組添加新值 MongoDB-GO

從另一個相同類型的陣列向數組添加新值 MongoDB-GO

WBOY
WBOY轉載
2024-02-08 22:48:22683瀏覽

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

php小編魚仔在這裡為大家介紹一種從另一個相同類型的陣列向陣列添加新值的方法,即在MongoDB-GO中的操作。這種方法可以幫助開發者更方便地對陣列進行修改和更新,提高開發效率。以下我們將詳細介紹這個方法的具體步驟和使用技巧,希望對大家有幫助!

問題內容

我目前正在 golang 上使用 mongodb 驅動程序,並嘗試從相同類型的輸入數組向文檔數組添加字段:

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"`
}

具體來說,我正在嘗試將成員數組中的值附加到文件中的值。這是我目前使用的功能:

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

}

從日誌中我檢查了 id 和輸入成員陣列的格式是否正確。但是我遇到了這個錯誤:

http: panic serving 172.23.0.4:42426: interface conversion: interface {} is nil, not primitive.ObjectID

我猜想錯誤是在我定義更新操作的方式中出現的,但是我一直無法找到解決方案。

任何幫助將不勝感激,提前致謝!

解決方法

看起來錯誤來自 *mongo.updateresult 類型中的 upsertedid 。由於某種原因,返回的 id 為零。

改變

// get newly updated result
    updatedorg, _ := o.getone(result.upsertedid.(primitive.objectid).hex())

對於

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

成功了。

以上是從另一個相同類型的陣列向數組添加新值 MongoDB-GO的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除