[英]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.