An operand in the update expression has an incorrect data type
TL;DR — Güncellemenin eylemi, gerçekte saklanana (ve gönderdiğiniz değere) karşı tür kontrol edilir ve biri uymuyor: sayı ya da küme olmayan bir özniteliğe karşı ADD, liste olmayan bir şeye karşı list_append ya da öğe türü saklanan kümeyle eşleşmeyen bir küme işleneni. İşleneni saklanan türle eşleştirin — ya da türü kaymış öğeyi düzeltin.
Ne anlama gelir
ValidationException: An operand in the update expression has an incorrect data typeGüncelleme eylemlerinin katı tür kuralları vardır: ADD yalnızca sayılarda ve kümelerde (SS/NS/BS) çalışır, DELETE yalnızca kümelerde ve list_append iki liste alır. DynamoDB, ifadeyi yazma sırasında öğenin mevcut öznitelik türlerine karşı değerlendirir — dolayısıyla aynı istek bir öğede başarılı olabilir ve özniteliği farklı bir tür tutan başka bir öğede başarısız olabilir. Yakın bir kuzeni daha erken, ifade ayrıştırma zamanında, gönderilen değerin türü operatöre asla uyamayacağında reddedilir:
ValidationException: Invalid UpdateExpression: Incorrect operand type for
operator or function; operator: ADD, operand type: LISTNeden olur
ADD counter :oneamacounterstring olarak saklanmış — örneğin öğe5(türN) yerine"5"(türS) ile içe aktarıldı.- Bir liste (
L) işleneniyleADD tags :t—ADD, listelere değil, kümelere toplar. ListelerSET+list_appendile eklenir. mylist'in bir map, küme ya da skaler olduğulist_append(mylist, :v)— her iki argüman da liste olmalıdır (tek bir elemanı tek öğelik bir liste olarak sarın).- Küme öğe türü uyuşmazlığı — saklanan bir sayı kümesine (
NS) karşı bir string kümesi (SS) işleneniyleADD/DELETEya da tersi. - Öğeler genelinde tür kayması — karışık yazıcılar (eski bir içe aktarma, başka bir hizmet) aynı özniteliği bazı öğelerde
N, başkalarındaSolarak bıraktı, dolayısıyla güncelleme yalnızca bazen başarısız olur.
Nasıl düzeltilir
Sayaçlar: değeri bir sayı olarak saklayın ve bir sayı işleneni gönderin:
UpdateExpression: 'ADD #c :one', ExpressionAttributeValues: {':one': 1} // {N: "1"} — not a stringListeler:
list_appendileSETkullanın ve yeni elemanı bir listeye sarın:UpdateExpression: 'SET #l = list_append(if_not_exists(#l, :empty), :new)', ExpressionAttributeValues: {':new': ['item'], ':empty': []}Kümeler:
ADD/DELETEişlenenlerini saklanan öznitelikle aynı küme türünde tutun (SSileSS,NSileNS).Kaymış öğeleri düzeltin — özniteliği yanlış türü taşıyan öğeleri bulun ve onları bir kez yeniden yazın; "aynı güncelleme bazı öğelerde başarısız oluyor" belirtisi her zaman koddan değil, veridendir.
Tür kayması çoğu konsolda görünmezdir — DynoTable'ın öğe düzenleyicisi, her özniteliğin gerçek saklanan türünü değerinin yanında görüntüler, böylece "5"-string-olarak bir sayaç hemen öne çıkar.
DynoTable’da aç
DynoTable'in öğe düzenleyicisi, değerinin yanında her özelliğin kayıtlı türünü (S, N, L, SS, …) gösterir; bir sayı sayacının yerine geçen "5" dizesi, ADD'i çalıştırmadan önce açıkça görülür. Öğeyi ⌘K ile açın ve türleri inceleyin, ardından güncellemeyi test etmek için aşamalandırmayı (⌘S) kullanın.
Açık tür etiketleriyle Expression Builder'daki düzeltilmiş ifadeyi oluşturun. Profilleri ⌘P ile değiştirin; bkz. Connect to AWS ve Install.
Kaynaklar
- Using update expressions in DynamoDB (2026-07-13 tarihinde doğrulandı)
- Supported data types and naming rules (2026-07-13 tarihinde doğrulandı)
İlgili hatalar
- Float types are not supported — SDK tarafından sayı-türü sürtünmesi.
- Number overflow
- Tür uyuşmazlığı: anahtar öğesi şemayla eşleşmiyor
- Öğrenin: Update expressions · Atomic counters · Data types
Kaynaklar
- Using update expressions in DynamoDB — Amazon DynamoDB Developer Guide
- TransactWriteItems — Amazon DynamoDB API Reference
- Supported data types and naming rules in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.