簡體   English   中英

基於3列的dynamodb更新項目

[英]dynamodb update item based on 3 columns

我有一個帶有custID和sensor作為我的主鍵和排序鍵的表

custID      sensor      data          date
joe           123       wind       01/01/1901
mary          456       rain       01/02/1901

現在,當新的記錄出現如下

新行:

joe, 123, temp, 01/04/1901

更新行:

joe, 123, wind, 01/07/1901

我想將其作為新行輸入,但是如果數據列匹配,我想更新該行。 現在,如果我將密鑰更改為傳感器和數據,則可以使用,但是如何使用當前密鑰進行此操作?

我的實際數據結構要比這復雜得多,但是我想對這個問題保持簡單。

var updateExpressions =[];
updateExpressions.push("#data"+counter+"=:data"+counter+", #date"+ counter +" = :date"+ counter);
attrNames["#data"+ counter] = "data";
attValues[":data"+ counter] = data;

attrNames["#date"+ counter] = "date";
attValues[":date"+ counter] = date;
counter++;

然后在負載參數中

var loadparamsP = {

    TableName: "mytable",
    Key: { sensor: sensor, custID: custID},
    ExpressionAttributeNames:attrNames,
    ExpressionAttributeValues:attValues,
    UpdateExpression:"SET "+ updateExpressions,
   ReturnValues: "UPDATED_NEW"
};
dynamo.updateItem(loadparamsP, function(err,res){
console.log(res + "res");
        if (err)
            callback(err)
        else{
            callback(null, 'Data inserted');

        }
});

編輯:所以我正在取得一些進展,與此同時,我認為我正在接近

因此,任何相關幫助,而不僅僅是聲稱是答案的隨機帖子,都將有所幫助

您可以嘗試的一個想法是創建一個GSI,該GSI將允許您使用數據列匹配項來查詢數據。

然后,您可以使用此GSI查詢項目,如果有數據,則可以更新該項目並將其寫回。

唯一潛在的缺點是,這基本上是“先檢查后行動”,對您而言可能是問題,也可能不是問題。 如果這是一個問題,則可以嘗試使用DynamoDB事務 ,但是它們僅為Java客戶端實現,並且成本很高

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM