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 masaüstü uygulaması, 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.
İlgili hatalar
- Float types are not supported — SDK tarafından sayı-türü sürtünmesi.
- Number overflow
- Type mismatch: key element does not match schema
- Öğrenin: Update expressions · Atomic counters · Data types
References
- 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ı.