Maison >développement back-end >Golang >Le pilote MongoDB GO écrase les données existantes

Le pilote MongoDB GO écrase les données existantes

WBOY
WBOYavant
2024-02-08 23:00:35931parcourir

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)

}

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}

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)

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer