Two document paths overlap with each other
TL;DR — Eine UpdateExpression darf jeden Dokumentpfad nur einmal berühren, und kein Pfad darf innerhalb eines anderen Pfades liegen, den dieselbe Expression ebenfalls berührt. SET profile = :p, profile.email = :e überlappt (profile.email liegt in profile); ebenso das zweimalige Benennen desselben Attributs. Falte das Kind in den Elternwert oder teile in zwei Updates.
Was es bedeutet
ValidationException: Invalid UpdateExpression: Two document paths overlap
with each other; must remove or rewrite one of these paths;
path one: [profile], path two: [profile, email]DynamoDB wertet jede Aktion in einer UpdateExpression gegen die Attributwerte des Items aus, wie sie vor dem Update waren — Aktionen werden nicht nacheinander von links nach rechts angewendet. Wenn zwei Aktionen überlappende Pfade adressieren (dasselbe Attribut oder ein Elternteil und etwas darin Verschachteltes), wäre das Ergebnis mehrdeutig: Läuft profile.email = :e vor oder nach profile = :p, das die ganze Map ersetzt? Statt zu raten, weist DynamoDB die Expression rundheraus zurück. (Dieselbe Overlap-Prüfung gilt für doppelte Pfade in einer ProjectionExpression.)
Warum es passiert
- Einen Elternteil und sein Kind in einer Expression setzen —
SET profile = :p, profile.email = :e. Der zweite Pfad liegt im ersten. - Dasselbe Attribut erscheint zweimal —
SET updatedAt = :a REMOVE updatedAtoderSET tags = :t ADD tags :more. - Ein ODM/Wrapper fügt stillschweigend einen Pfad hinzu, den du ebenfalls setzt — der klassische Fall: eine Bibliothek schreibt automatisch einen Zeitstempel oder das ganze Objekt (
SET item = :obj), während dein Code auchitem.fieldsetzt (gesehen in Dynamoose mit automatischemcreatedAt/updatedAt). - Eine Liste und eines ihrer Elemente zusammen aktualisieren —
SET mylist = :l, mylist[0] = :v.
So behebst du es
Falte das Kind in den Elternwert — wenn du die Map ohnehin ersetzt, setze die neue E-Mail hinein und lass die zweite Aktion weg:
// instead of SET profile = :p, profile.email = :e UpdateExpression: 'SET #p = :p', ExpressionAttributeValues: {':p': {name: 'Ada', email: 'ada@example.com'}}Oder aktualisiere nur die Blätter — lass den Elternteil unberührt und setze die verschachtelten Felder einzeln (
SET #p.#n = :n, #p.#e = :e). Geschwisterpfade unter demselben Elternteil überlappen nicht; nur Verschachtelung tut das.Dedupliziere — stelle sicher, dass jedes Attribut in genau einer Aktion über
SET/REMOVE/ADD/DELETEerscheint.Prüfe die Auto-Felder deiner Bibliothek — deaktiviere oder schließe automatisch verwaltete Attribute (Zeitstempel, Versionen) aus Updates aus, in denen deine eigene Expression sie bereits schreibt.
Teile in zwei Requests, wenn du wirklich die Semantik "Elternteil ersetzen, dann Kind anpassen" brauchst — zwei
UpdateItem-Aufrufe, in Reihenfolge.
Verschachtelte Maps von Hand zu bearbeiten ist der Ort, an dem sich Overlaps einschleichen — die DynoTable-Desktop-App bearbeitet die Attribute eines Items an Ort und Stelle und stellt ein sauberes, nicht überlappendes Update für genau das aus, was sich geändert hat.
Verwandte Fehler
- The document path provided is invalid for update — der andere Fehler bei verschachtelten Pfad-Updates (Elternteil fehlt statt doppelt geschrieben).
- Invalid UpdateExpression: Syntax error
- Learn: Update-Expressions
Referenzen
- Using update expressions in DynamoDB — Amazon DynamoDB Developer Guide
- Referring to item attributes when using expressions in DynamoDB — Amazon DynamoDB Developer Guide
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.