0

Bott3のput_itemに、DynamoDBのオブジェクトを置き換えるための問題があります(一部の属性がDynamoDBテーブルの主キーであり、一部がそうでないものが挿入している新しいオブジェクトと一致する場合)。テーブルに入れます。例えばオブジェクトに特定の属性が存在する場合、Boto3を使用して、put_itemを取得してDynamoDBのオブジェクトを置き換えますか?

、DynamoDBのテーブルは、その中にある場合:

user (Partition Key) | ts (Sort Key) | height | weight 
__________________________________________________________________________________ 

'fred'     01-01-2017  5'10'' 190 
'george'    01-02-2017  5'08'' 200 

と、私はこのテーブルに新しい行を追加しようとしています:ユーザーfredに基づいて

'fred'     01-01-2018  5'10'' 200 

と高さ5'10''がすでにテーブルに入っている別のユーザーと一致している場合は、古いエントリの新しいエントリを使用したいと思います。 boto3とAWS put_itemのドキュメントは少し不明です。どうすればいいですか?

参考のために、これは私が現在持っているものです。

tracking_result = tracking_dbs[drivetype].put_item(
     Item=track, 
     # insert fields to remove old entry that matches 
     # up with certain attributes from new entry here 
) 

答えて

1

DynamoDBの中に、すでに既存のエントリは、パーティション・キー、新しいエントリのソート・キーがあることと一致した場合にのみ、新しいエントリに置き換えられます既存のエントリのそれ以外の場合は、新しいエントリが作成されます。

既存のエントリを削除する必要があります(検索で既存のエントリを取得し、クエリではパーティションとソートキーの両方を入力パラメータとして指定してから削除操作を実行する必要があります)。

+0

ありがとうございました!スキャンせずにこれを行う方法はありますか?可能であれば、DB上でO(n)操作をしないようにしたいと思います。 –

+0

ソートキーが必要ですか?そうでない場合、テーブルに大量のデータがない場合は、そのテーブルを削除し、パーティションキー(ユーザー)のみを使用し、並べ替えキーを使用せずに新しいテーブルを作成します。 put_itemはあなたが望むように動作します。 –

関連する問題