Maison > développement back-end > Golang > le corps du texte

Le pilote MongoDB GO écrase les données existantes

WBOY
Libérer: 2024-02-08 23:00:35
avant
884 Les gens l'ont consulté

MongoDB GO 驱动程序覆盖现有数据

l'éditeur php Banana apporte l'introduction d'un nouveau pilote MongoDB GO couvrant les données existantes. En tant que base de données NoSQL populaire, MongoDB gagne en popularité parmi les développeurs. Ce nouveau pilote offre un moyen flexible et efficace de manipuler les données dans MongoDB. Il prend en charge diverses opérations de requête et de mise à jour tout en fournissant également des fonctionnalités avancées telles que le traitement des transactions et l'agrégation de données. En utilisant ce pilote, les développeurs peuvent facilement interagir avec MongoDB dans les projets GO, permettant un développement rapide et des performances élevées. Qu'il s'agisse d'un projet nouveau ou existant, ce pilote offre aux développeurs une meilleure expérience de manipulation des données. Que vous soyez débutant ou développeur expérimenté, ce pilote sera votre meilleur choix.

Contenu de la question

J'utilise go-fiber 并使用 mongodb le pilote mongodb go. Je souhaite uniquement mettre à jour les champs donnés par le corps. Mais cela écrase les données.

func UpdateOneUser(c *fiber.Ctx) error {
    params := c.Params("id")
    body := new(models.User)
    
    id, err := primitive.ObjectIDFromHex(params)
    if err != nil {
        return c.Status(500).SendString("invalid onjectid")
    }

    if err := c.BodyParser(&body); err != nil {
        return c.Status(400).SendString("invalid body")
    }
    
    filter := bson.M{"_id": id}
    update := bson.M{"$set": bson.M{
        "name": body.Name,
        "username": body.Username,
        "first_name": body.FirstName,
        "last_name": body.LastName,
        "email": body.Email,
        "phone_number": body.PhoneNumber,
        "contry": body.Contry,
        "age": body.Age,
        "child_accounts": body.ChildAccounts,
        "groups": body.Groups,

    }}
    
    result, err := db.User.UpdateOne(context.Background(), filter, update)
    if err != nil {
        return c.Status(500).SendString("user not found")
    }
    fmt.Println(result)

    return c.JSON(body)

}
Copier après la connexion

Si le pilote fonctionne ainsi, veuillez m'indiquer une meilleure façon de mettre à jour la documentation. L'opérateur

Workaround

$set couvrira tous les champs que vous spécifiez, vous devez donc créer de manière sélective votre instruction de mise à jour :

fields:=bson.m{}
if body.name!="" {
   fields["name"]=body.name
}
...
update:=bson.m{"$set":fields}
Copier après la connexion

Quelques raccourcis que vous pouvez utiliser :

fields:=bson.M{}
add:=func(key,value string) {
   if value!="" {
      fields[key]=value
   }
}
add("name",body.Name)
add("userName",body.UserName)
Copier après la connexion

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!