The provided expression refers to an attribute that does not exist in the item
TL;DR — UpdateExpression'ınız, öğede bulunmayan bir özniteliği okuyor — bir aritmetik işlenen (score hiç ayarlanmamışken SET score = score + :inc), başka bir öznitelikten kopya (SET a = b) ya da liste işleneni eksik olan bir list_append. Okumayı if_not_exists ile koruyun ya da öğe oluşturulurken özniteliği tohumlayın. (Üst map'i eksik olan yuvalanmış bir yola yazmak, ayrı "document path invalid for update" hatasını fırlatır.)
Ne anlama gelir
ValidationException: The provided expression refers to an attribute
that does not exist in the itemBu bir HTTP 400 ValidationException'dır. İstek düzgün ayrıştırıldı ama DynamoDB onu öğeye karşı değerlendirdiğinde, ifadenizin okuduğu bir öznitelik — +/- işleneni, bir SET a = b kopyasının kaynağı ya da bir list_append argümanı — orada değil, bu yüzden işlenen çözümlenemez. İstemci tarafında ve yeniden denenebilir değildir: aynı öğe + ifade onu yeniden üretir.
Neden olur
- Ayarlanmamış bir öznitelik üzerinde aritmetik —
scorehiç başlatılmamışkenSET score = score + :incfırlatır; belgelerin artırma/azaltma söz dizimi mevcut bir sayısal öznitelik üzerinde çalışır. - Eksik bir öznitelikten kopyalama — öğenin
email'i yokkenSET backupEmail = email. - Eksik bir listede
list_append—tagshenüz yokkenSET tags = list_append(tags, :more). - Yuvalanmış bir yol için yanlış yer tutucu eşlemesi — yalnızca yaprağı ikame etmek yerine tüm noktalı yolu tek bir
ExpressionAttributeNamesgirdisine ("#p": "stats.viewCount") eşlemek; DynamoDB,"stats.viewCount"literalini tek bir öznitelik adı olarak ele alır, ki ifade onu okuduğu anda eksiktir. - Bir okuma öznitelik adında bir yazım hatası ya da yanlış büyük/küçük harf — DynamoDB öznitelik adları büyük/küçük harfe duyarlıdır.
Nasıl düzeltilir
- Okumayı
if_not_existsile koruyun, böylece öznitelik henüz orada olmasa bile ilk yazma çalışır:SET score = if_not_exists(score, :zero) + :inc SET tags = list_append(if_not_exists(tags, :emptyList), :more) - Öğe oluşturulurken özniteliği tohumlayın — önceden
score: 0,tags: []yazın, böylece sonraki okumalar her zaman çözümlensin. - Bir yuvalanmış yolda yalnızca yaprağı ikame edin — ifadede noktaları literal tutun: tek bir addaki tüm yol değil,
{"#c": "viewCount"}ileSET stats.#c = :v. - Yolun geçerli olduğunu varsaymadan önce bir
GetItemile özniteliğin var olduğunu / yazım + büyük-küçük harfi doğrulayın. - Üst map'i eksik olan bir yuvalanmış alt öğeye mi yazıyorsunuz? Bu, kardeş hatadır — iki adımlı üst-oluşturma deseni için the document path provided in the update expression is invalid for update'a bakın.
Güncellemeyi yazarken öğenin gerçek şeklini önünüzde ister misiniz? DynoTable masaüstü uygulaması her özniteliği (yuvalanmış map'ler ve listeler dahil) gösterir, böylece eksik bir üst yol bir bakışta bellidir.
İlgili hatalar
- The document path provided in the update expression is invalid for update — üst map'i/listesi eksik ya da yanlış türde olan yuvalanmış bir yola yazmak.
- Invalid UpdateExpression syntax — ifadenin kendisi hatalı biçimlendirilmiş, bu kontrolden önce yakalanır.
- Reserved keyword in attribute name — bir ad, ayrılmış bir sözcükle çakışır.
- ExpressionAttributeValues invalid
- Öğrenin: Update expressions · Expression names & values
Kaynaklar
- Using update expressions in DynamoDB — Amazon DynamoDB Developer Guide
- TransactWriteItems — Amazon DynamoDB API Reference
- Expression attribute names (aliases) in DynamoDB — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.