


Cara mengemas kini hanya satu medan dalam DynamoDB menggunakan AWS Go SDK
Semoga seseorang dapat memberi sedikit pencerahan tentang isu yang saya hadapi ini.
Saya ada meja ini dalam dinamo, jom panggil people
,在这个表中,我有 id
的属性作为我们的分区键、name
、lastname
和 status
.
Saya mahu dapat mengemas kini hanya satu harta atau menyimpan semua sifat id.
Sekarang, ini adalah cara saya melakukannya. Saya mencipta struktur berikut:
type personupdate struct { firstname string `json:"firstname,omitempty"` lastname string `json:"lastname,omitempty"` status string `json:"status,omitempty"` }
Permintaan daripada pelayan hanya mengemas kini nama keluarga orang itu, jadi badan permintaan kami akan kelihatan seperti ini:
{ "lastname": "bob" }
Selepas mengikat permintaan pada struktur, objek yang akan dihantar ke dinamo akan kelihatan seperti ini:
{ "firstname": "", "lastname": "bob", "status": "", }
Sekarang, seperti yang anda lihat, apabila tiba masanya untuk menulis kepada dynamo, hanya satu sifat perlu dikemas kini dan selebihnya sifat kosong/kosong harus diabaikan.
Kod yang ditulis untuk melakukan ini boleh dipekatkan kepada yang berikut:
// marshal our object _, err := dynamodbattribute.marshalmap(person) if err != nil{ fmt.println("some error marshaling") } // create our update input input := &dynamodb.updateiteminput{ key: map[string]*dynamodb.attributevalue{ "id":{ s: aws.string("1234"), }, }, tablename: aws.string("people"), expressionattributevalues: map[string]*dynamodb.attributevalue{ ":fn": { s: aws.string(person.firstname), }, ":ln":{ s: aws.string(person.lastname), }, ":st":{ s: aws.string(person.status), }, }, updateexpression: aws.string("set firstname = :fn, lastname = :ln, status = :st"), returnvalues: aws.string("updated_new"), } // send update request to dynamo _, err := service.updateitem(input)
Kini, tiada masalah dengan mengemas kini, masalahnya ialah bendera firstname
和 status
的 null 值也被传递。我尝试过阅读他们的文档,但还是有点困惑。我知道java sdk允许您传递一个名为update_skip_null_attributes
, yang membolehkan anda melangkau nilai nol tersebut dan mengemas kini hanya nilai yang mempunyai data. Saya tidak tahu apa yang setara dengannya, sebarang bantuan/tunjuk ajar akan menjadi bagus.
Kemas kini:
Cuba gunakan model berikut:
type usermodel struct { firstname string `json:"firstname,omitempty" dynamodbav:"firstname,omitempty"` lastname string `json:"lastname,omitempty" dynamodbav:"lastname,omitempty"` }
Ikuti nasihat yang diberikan oleh @jarmod dan @fedonev. Secara logik dan menggunakan dokumentasi adalah mungkin untuk memahami mengapa ini harus berfungsi, malangnya ia tidak
Memutuskan untuk menukar sdk daripada v1 kepada v2 untuk melihat sama ada mengemas kini ia akan membantu, walaupun saya terperangkap dalam keadaan yang sama sekali lagi. Inilah rupa fungsi kemas kini saya.
update :=expression.Set(expression.Name("firstName"),expression.Value(user.FirstName)) update.Set(expression.Name("lastName"), expression.Value(user.LastName)) expr, err := expression.NewBuilder().WithUpdate(update).Build() if err != nil { "log error here..." } _, err = svc.UpdateItem(context.TODO(), &dynamodb.UpdateItemInput{ TableName: aws.String("people"), Key: map[string]types.AttributeValue{"id": id}, ExpressionAttributeNames: expr.Names(), ExpressionAttributeValues: expr.Values(), UpdateExpression: expr.Update(), ReturnValues: types.ReturnValueUpdatedNew, }) if err != nil { "log error here..." }
Saya akhirnya menyelesaikan masalah saya dengan menulis pertanyaan dan mencipta fungsi yang cukup banyak menanyakan muatan json dengan id yang ingin kami kemas kini dan mengemas kini berdasarkan perbezaan perkara yang perlu kami tanyakan, sebarang medan kosong akan ditanya Penggantian hasil. Setakat ini ia menyelesaikan masalah saya, tetapi saya masih tertanya-tanya bagaimana untuk mengemas kininya dengan fungsi yang dimaksudkan.
Jawapan betul
Seperti komen @jarmod, medan bernilai sifar dilangkau apabila menggunakan dynamodbav:",omitempty"
tag pada marshalling structures:
type personupdate struct { firstname string `json:"firstname,omitempty" dynamodbav:",omitempty"` lastname string `json:"lastname,omitempty" dynamodbav:",omitempty"` status string `json:"status,omitempty" dynamodbav:",omitempty"` }
[EDIT: Penggunaan tambahan] marshalmap
Medan nilai sifar kini akan diabaikan, menghormati label. Lelaran di atas peta untuk membina ungkapan kemas kini:
av, _ := attributevalue.MarshalMap(person) update := expression.UpdateBuilder{} for k, v := range av { update = update.Set(expression.Name(k), expression.Value(v)) }
Bina ekspresi dan hantar outputnya kepada updateitem
seperti yang ditunjukkan dalam op.
Atas ialah kandungan terperinci Cara mengemas kini hanya satu medan dalam DynamoDB menggunakan AWS Go SDK. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

OpenSSL, sebagai perpustakaan sumber terbuka yang digunakan secara meluas dalam komunikasi yang selamat, menyediakan algoritma penyulitan, kunci dan fungsi pengurusan sijil. Walau bagaimanapun, terdapat beberapa kelemahan keselamatan yang diketahui dalam versi sejarahnya, yang sebahagiannya sangat berbahaya. Artikel ini akan memberi tumpuan kepada kelemahan umum dan langkah -langkah tindak balas untuk OpenSSL dalam sistem Debian. Debianopenssl yang dikenal pasti: OpenSSL telah mengalami beberapa kelemahan yang serius, seperti: Kerentanan Pendarahan Jantung (CVE-2014-0160): Kelemahan ini mempengaruhi OpenSSL 1.0.1 hingga 1.0.1f dan 1.0.2 hingga 1.0.2 versi beta. Penyerang boleh menggunakan kelemahan ini untuk maklumat sensitif baca yang tidak dibenarkan di pelayan, termasuk kunci penyulitan, dll.

Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Laluan Pembelajaran Backend: Perjalanan Eksplorasi dari Front-End ke Back-End sebagai pemula back-end yang berubah dari pembangunan front-end, anda sudah mempunyai asas Nodejs, ...

Perbezaan antara percetakan rentetan dalam bahasa Go: perbezaan kesan menggunakan fungsi println dan rentetan () sedang ...

Artikel ini memperkenalkan pelbagai kaedah dan alat untuk memantau pangkalan data PostgreSQL di bawah sistem Debian, membantu anda memahami pemantauan prestasi pangkalan data sepenuhnya. 1. Gunakan PostgreSQL untuk membina pemantauan PostgreSQL sendiri menyediakan pelbagai pandangan untuk pemantauan aktiviti pangkalan data: PG_STAT_ACTIVITY: Memaparkan aktiviti pangkalan data dalam masa nyata, termasuk sambungan, pertanyaan, urus niaga dan maklumat lain. PG_STAT_REPLITI: Memantau status replikasi, terutamanya sesuai untuk kluster replikasi aliran. PG_STAT_DATABASE: Menyediakan statistik pangkalan data, seperti saiz pangkalan data, masa komitmen/masa rollback transaksi dan petunjuk utama lain. 2. Gunakan alat analisis log pgbadg

Di bawah rangka kerja beegoorm, bagaimana untuk menentukan pangkalan data yang berkaitan dengan model? Banyak projek beego memerlukan pelbagai pangkalan data untuk dikendalikan secara serentak. Semasa menggunakan beego ...

Masalah menggunakan redisstream untuk melaksanakan beratur mesej dalam bahasa Go menggunakan bahasa Go dan redis ...
