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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2024-02-08 22:48:22
avant
785 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!

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