DynamoDB — tidak dapat menggunakan parameter ekspresi dan non-ekspresi: "Can Not Use Both Expression and Non-Expression Parameters"

TL;DR — Permintaan Anda menyetel parameter lama (KeyConditions, QueryFilter, ScanFilter, AttributesToGet, Expected, AttributeUpdates, ConditionalOperator) dan ekspresi setaranya (KeyConditionExpression, FilterExpression, ProjectionExpression, ConditionExpression, UpdateExpression) dalam panggilan yang sama. DynamoDB melarang pencampuran kedua keluarga. Hapus parameter lama dan gunakan ekspresi saja.

Apa artinya

ValidationException: Can not use both expression and non-expression parameters in
the same request: Non-expression parameters: {KeyConditions} Expression
parameters: {KeyConditionExpression}

# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: Can not use both expression and non-expression parameters in the same request: Non-expression parameters: {KeyConditions} Expression parameters: {KeyConditionExpression}

Mengapa itu terjadi

  • Kode setengah migrasi — Anda menambahkan KeyConditionExpression tetapi meninggalkan KeyConditions lama pada objek params yang sama.
  • Tabrakan proyeksiAttributesToGet (warisan) bersama ProjectionExpression.
  • Tabrakan filterScanFilter/QueryFilter bersama FilterExpression.
  • Tabrakan tulisExpected/AttributeUpdates bersama ConditionExpression/UpdateExpression.
  • Pustaka pembantu yang memasukkan default lama saat Anda menyetel formulir ekspresi.

Bagaimana cara memperbaikinya

  1. Hapus parameter lama. Hanya simpan bentuk ekspresi: KeyConditionExpression melalui KeyConditions, FilterExpression melalui ScanFilter/QueryFilter, ProjectionExpression melalui AttributesToGet, ConditionExpression/UpdateExpression melalui Expected/AttributeUpdates.
  2. Pindahkan nilai ke dalam placeholder — nilai sebaris lama menjadi ExpressionAttributeValues (:v) dan nama /complex yang dicadangkan menjadi ExpressionAttributeNames (#n).
  3. Audit seluruh objek parameter — konflik dapat terjadi antara dua masalah yang berbeda (misalnya proyeksi lama + kondisi kunci ekspresi), bukan hanya satu masalah yang sama.
  4. Pilih ekspresi di mana pun — AWS mempertahankan parameter lama hanya untuk kompatibilitas mundur dan merekomendasikan parameter ekspresi untuk semua kode baru; standarisasi ekspresi menghindari kelas kesalahan ini.
  5. Hapus default lama dari pustaka pembantu. Beberapa wrapper SDK masih memasukkan AttributesToGet atau KeyConditions kecuali Anda menonaktifkannya secara eksplisit.

Jalankan di DynoTable

Panel kueri DynoTable hanya menggunakan parameter ekspresi — tidak ada bidang KeyConditions atau ScanFilter lama dalam permintaan yang dihasilkan. Buka tabel dengan ⌘K, buat Kueri atau Pemindaian, lalu salin KeyConditionExpression yang dipancarkan dan peta atribut ke dalam migrasi Anda.

Gunakan Pembuat Kueri untuk membuat prototipe permintaan khusus ekspresi sebelum Anda memfaktorkan ulang kode SDK lama. Penahapan (⌘S) memungkinkan Anda menguji kueri baru terhadap data langsung tanpa melakukan penulisan. Ganti profil dengan ⌘P; konfigurasikan di bawah Pengaturan → Profil dengan Uji Koneksi. Lihat Menghubungkan ke AWS dan Instal. Parameter KeyConditions dan ScanFilter lama tidak muncul di mana pun dalam permintaan yang dibuat DynoTable. Jika pembungkus SDK Anda masih memasukkannya, catat objek params lengkap dan hapus setiap kunci lama sebelum panggilan mencapai DynamoDB.

Sumber

Kesalahan terkait

Referensi

Terakhir diverifikasi 2026-07-13 berdasarkan dokumentasi resmi AWS yang ditautkan di atas.

Bekerja dengan DynamoDB tanpa Console

Klien desktop DynamoDB yang cepat dan menjalankan SQL sungguhan yang tidak bisa dijalankan DynamoDB — JOINs, GROUP BY, agregasi — dengan editing visual dan agen AI pada kunci Bedrock milik Anda sendiri.

Uji coba gratis 30 hari, tanpa kartu kredit — lalu paket Free tanpa batas waktu.