Maison > développement back-end > Golang > Ajouter une nouvelle valeur au tableau à partir d'un autre tableau du même type MongoDB-GO

Ajouter une nouvelle valeur au tableau à partir d'un autre tableau du même type MongoDB-GO

WBOY
Libérer: 2024-02-08 22:48:22
avant
720 Les gens l'ont consulté

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

l'éditeur php Yuzai est là pour vous présenter une méthode d'ajout de nouvelles valeurs à un tableau à partir d'un autre tableau du même type, c'est-à-dire une opération dans MongoDB-GO. Cette méthode peut aider les développeurs à modifier et mettre à jour les baies plus facilement et à améliorer l'efficacité du développement. Ci-dessous, nous présenterons en détail les étapes spécifiques et les techniques d’utilisation de cette méthode. Nous espérons qu’elle sera utile à tout le monde !

Contenu de la question

J'utilise actuellement le pilote mongodb sur golang et j'essaie d'ajouter un champ à un tableau de documents à partir d'un tableau d'entrée du même type :

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"`
}
Copier après la connexion

Plus précisément, j'essaie d'ajouter une valeur d'un tableau de membres à une valeur du document. Voici la fonction que j'utilise actuellement :

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

}
Copier après la connexion

À partir des journaux, j'ai vérifié que les tableaux de membres id et input sont au format correct. Mais j'ai eu cette erreur :

http: panic serving 172.23.0.4:42426: interface conversion: interface {} is nil, not primitive.ObjectID
Copier après la connexion

Je suppose que l'erreur vient de la façon dont je définis l'opération de mise à jour, mais je n'ai pas réussi à trouver de solution.

Toute aide serait grandement appréciée, merci d'avance !

Solution de contournement

On dirait que l'erreur vient de *mongo.updateresult 类型中的 upsertedid . Pour une raison quelconque, l'identifiant renvoyé est zéro.

Changement

// get newly updated result
    updatedorg, _ := o.getone(result.upsertedid.(primitive.objectid).hex())
Copier après la connexion

pour

// get newly updated result
    updatedOrg, _ := o.GetOne(organizationID)
Copier après la connexion

Réussi.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal