


So aktualisieren Sie nur ein einzelnes Feld in DynamoDB mit dem AWS Go SDK
Hoffentlich kann jemand etwas Licht in dieses Problem bringen, mit dem ich zu kämpfen habe.
Ich habe diesen Tisch in Dynamo, nennen wir ihn people
,在这个表中,我有 id
的属性作为我们的分区键、name
、lastname
和 status
.
Ich möchte nur eine einzelne Eigenschaft aktualisieren oder alle Eigenschaften der ID speichern können.
Nun, so mache ich es. Ich habe folgende Struktur erstellt:
type personupdate struct { firstname string `json:"firstname,omitempty"` lastname string `json:"lastname,omitempty"` status string `json:"status,omitempty"` }
Die Anfrage vom Server aktualisiert lediglich den Nachnamen der Person, sodass unser Anfragetext wie folgt aussieht:
{ "lastname": "bob" }
Nachdem die Anfrage an die Struktur gebunden wurde, sieht das Objekt, das an Dynamo gesendet wird, folgendermaßen aus:
{ "firstname": "", "lastname": "bob", "status": "", }
Wie Sie sehen können, sollte beim Schreiben an Dynamo nur eine Eigenschaft aktualisiert werden und die restlichen leeren/leeren Eigenschaften sollten ignoriert werden.
Der hierfür geschriebene Code kann wie folgt zusammengefasst werden:
// marshal our object _, err := dynamodbattribute.marshalmap(person) if err != nil{ fmt.println("some error marshaling") } // create our update input input := &dynamodb.updateiteminput{ key: map[string]*dynamodb.attributevalue{ "id":{ s: aws.string("1234"), }, }, tablename: aws.string("people"), expressionattributevalues: map[string]*dynamodb.attributevalue{ ":fn": { s: aws.string(person.firstname), }, ":ln":{ s: aws.string(person.lastname), }, ":st":{ s: aws.string(person.status), }, }, updateexpression: aws.string("set firstname = :fn, lastname = :ln, status = :st"), returnvalues: aws.string("updated_new"), } // send update request to dynamo _, err := service.updateitem(input)
Jetzt gibt es kein Problem mit der Aktualisierung, das Problem ist das firstname
和 status
的 null 值也被传递。我尝试过阅读他们的文档,但还是有点困惑。我知道java sdk允许您传递一个名为update_skip_null_attributes
-Flag, das es Ihnen ermöglicht, diese Nullwerte zu überspringen und nur die Werte zu aktualisieren, die Daten enthalten. Ich weiß nicht, was das Äquivalent in go ist, jede Hilfe/Anleitung wäre großartig.
Update:
Versuchen Sie es mit den folgenden Modellen:
type usermodel struct { firstname string `json:"firstname,omitempty" dynamodbav:"firstname,omitempty"` lastname string `json:"lastname,omitempty" dynamodbav:"lastname,omitempty"` }
Folgen Sie den Ratschlägen von @jarmod und @fedonev. Logischerweise und anhand der Dokumentation kann man nachvollziehen, warum das funktionieren sollte, leider funktioniert es nicht
Ich habe beschlossen, das SDK von Version 1 auf Version 2 umzustellen, um zu sehen, ob eine Aktualisierung helfen würde, obwohl ich wieder in der gleichen misslichen Lage stecke. So sieht meine Update-Funktion aus.
update :=expression.Set(expression.Name("firstName"),expression.Value(user.FirstName)) update.Set(expression.Name("lastName"), expression.Value(user.LastName)) expr, err := expression.NewBuilder().WithUpdate(update).Build() if err != nil { "log error here..." } _, err = svc.UpdateItem(context.TODO(), &dynamodb.UpdateItemInput{ TableName: aws.String("people"), Key: map[string]types.AttributeValue{"id": id}, ExpressionAttributeNames: expr.Names(), ExpressionAttributeValues: expr.Values(), UpdateExpression: expr.Update(), ReturnValues: types.ReturnValueUpdatedNew, }) if err != nil { "log error here..." }
Am Ende habe ich mein Problem gelöst, indem ich eine Abfrage- und Erstellungsfunktion geschrieben habe, die die JSON-Nutzlast praktisch anhand der ID abfragt, die wir aktualisieren möchten, und basierend auf dem Unterschied zwischen dem, was wir abfragen müssen, aktualisiert. Alle leeren Felder werden als Ergebnisersetzung abgefragt. Bisher hat es mein Problem gelöst, aber ich frage mich immer noch, wie ich es mit der beabsichtigten Funktionalität aktualisieren kann.
Richtige Antwort
Wie im Kommentar von @jarmod steht, werden Nullwertfelder übersprungen, wenn dynamodbav:",omitempty"
-Tags auf Marshallingstrukturen angewendet werden:
type personupdate struct { firstname string `json:"firstname,omitempty" dynamodbav:",omitempty"` lastname string `json:"lastname,omitempty" dynamodbav:",omitempty"` status string `json:"status,omitempty" dynamodbav:",omitempty"` }
[BEARBEITEN: Verwendung hinzugefügt] marshalmap
Nullwertfelder werden jetzt unter Berücksichtigung der Beschriftungen ignoriert. Durchlaufen Sie die Karte, um einen Aktualisierungsausdruck zu erstellen:
av, _ := attributevalue.MarshalMap(person) update := expression.UpdateBuilder{} for k, v := range av { update = update.Set(expression.Name(k), expression.Value(v)) }
Erstellen Sie den Ausdruck und übergeben Sie seine Ausgabe an updateitem
, wie in der Operation gezeigt.
Das obige ist der detaillierte Inhalt vonSo aktualisieren Sie nur ein einzelnes Feld in DynamoDB mit dem AWS Go SDK. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

OpenSSL bietet als Open -Source -Bibliothek, die in der sicheren Kommunikation weit verbreitet sind, Verschlüsselungsalgorithmen, Tasten und Zertifikatverwaltungsfunktionen. In seiner historischen Version sind jedoch einige Sicherheitslücken bekannt, von denen einige äußerst schädlich sind. Dieser Artikel konzentriert sich auf gemeinsame Schwachstellen und Antwortmaßnahmen für OpenSSL in Debian -Systemen. DebianopensL Bekannte Schwachstellen: OpenSSL hat mehrere schwerwiegende Schwachstellen erlebt, wie z. Ein Angreifer kann diese Sicherheitsanfälligkeit für nicht autorisierte Lesen sensibler Informationen auf dem Server verwenden, einschließlich Verschlüsselungsschlüssel usw.

In der Bibliothek, die für den Betrieb der Schwimmpunktnummer in der GO-Sprache verwendet wird, wird die Genauigkeit sichergestellt, wie die Genauigkeit ...

Das Problem der Warteschlange Threading In Go Crawler Colly untersucht das Problem der Verwendung der Colly Crawler Library in Go -Sprache. Entwickler stoßen häufig auf Probleme mit Threads und Anfordern von Warteschlangen. � ...

Backend Learning Path: Die Erkundungsreise von Front-End zu Back-End als Back-End-Anfänger, der sich von der Front-End-Entwicklung verwandelt, Sie haben bereits die Grundlage von Nodejs, ...

Der Unterschied zwischen Stringdruck in GO -Sprache: Der Unterschied in der Wirkung der Verwendung von Println und String () ist in Go ...

In diesem Artikel werden eine Vielzahl von Methoden und Tools eingeführt, um PostgreSQL -Datenbanken im Debian -System zu überwachen, um die Datenbankleistung vollständig zu erfassen. 1. verwenden Sie PostgreSQL, um die Überwachungsansicht zu erstellen. PostgreSQL selbst bietet mehrere Ansichten für die Überwachung von Datenbankaktivitäten: PG_STAT_ACTIVITY: Zeigt Datenbankaktivitäten in Echtzeit an, einschließlich Verbindungen, Abfragen, Transaktionen und anderen Informationen. PG_STAT_REPLIKATION: Monitore Replikationsstatus, insbesondere für Stream -Replikationscluster. PG_STAT_DATABASE: Bietet Datenbankstatistiken wie Datenbankgröße, Transaktionsausschüsse/Rollback -Zeiten und andere Schlüsselindikatoren. 2. Verwenden Sie das Log -Analyse -Tool PGBADG

Wie kann man im Beegoorm -Framework die mit dem Modell zugeordnete Datenbank angeben? In vielen BeEGO -Projekten müssen mehrere Datenbanken gleichzeitig betrieben werden. Bei Verwendung von BeEGO ...

Das Problem der Verwendung von RETISTREAM zur Implementierung von Nachrichtenwarteschlangen in der GO -Sprache besteht darin, die Go -Sprache und Redis zu verwenden ...
