Il ne peut y avoir qu'une seule instance, une seule entité liée/indiquée par la même clé de magasin de données.
Et les entités (liées à une clé) peuvent uniquement être remplacées, pas mises à jour/étendues/ajoutées progressivement. Donc, si vous avez déjà une entité enregistrée, pour la mettre à jour/la modifier, vous devez d'abord la charger, puis modifier l'entité en mémoire et écrire (enregistrer) l'entité modifiée. Cette sauvegarde remplacera l'entité existante dans le magasin de données.
Si, pour une propriété, vous souhaitez stocker plusieurs valeurs, le type de cette propriété doit prendre en charge le stockage de plusieurs valeurs. Slices dans Go sont de type.
Donc, dans votre exemple, votre entité devrait ressembler à ceci:
type Entity struct {
Values []string
}
Lorsque vous chargez un Entity
existant, vous devez ajouter la nouvelle valeur à son champ Values
, quelque chose comme ça (en pseudo-code):
e := ... // load existing entity
e.Values = append(e.Values, input) // Append new data to Values
// And now save Entity (e) with the same key
Dans le code:
client, err := datastore.NewClient(ctx, projectID)
tx, err := client.NewTransaction(ctx)
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
fmt.Fprint(w, input)
taskKey := datastore.NameKey("Entity", "stringID", nil)
var task Entity
if err := tx.Get(taskKey, &task); err != nil {
log.Fatalf("tx.Get: %v", err)
}
task.Values = append(task.Values, input)
if _, err := tx.Put(taskKey, &task); err != nil {
log.Fatalf("tx.Put: %v", err)
}
if _, err := tx.Commit(); err != nil {
log.Fatalf("tx.Commit: %v", err)
}
Si vous devez indexer cette propriété Values
, vous risquez de rencontrer des problèmes si elle contient de nombreuses valeurs. Voir cette duplication possible pour plus de détails: App Engine Datastore: How to set multiple values on a property using golang?
Si vous rencontrez ce problème, vous devriez envisager de modéliser et de stocker vos données dans un format différent, par ex.enregistrement dans plusieurs entités, où une entité ne stockerait qu'un seul input
, connecté à la clé à laquelle il appartient.
Qu'est-ce que 'Entity' et' input'? Veuillez les poster et ce que vous voulez réaliser exactement. – icza
L'entité est struct & input est une chaîne. _type struct entité { \t chaîne de valeur } entrée: = r.URL.Query() Get ("entrée") _ – vindl
Et que voulez-vous "ajouter".? Que veux-tu accomplir? – icza