dynamodb基于3列更新项目

我有一个custID和传感器作为我的主键和sorting键的表

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

现在当一个新的logging如下所示

新行:

 joe, 123, temp, 01/04/1901 

更新行:

 joe, 123, wind, 01/07/1901 

我想input它作为一个新的行,但如果数据列匹配,我想更新行。 现在,如果我改变我的钥匙传感器和数据,这将工作,但我将如何做到这一点与当前的钥匙?

我的实际数据结构比这个复杂得多,但是我想保持简单。

 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'); } }); 

编辑:所以我正在取得一些进展,与此,我想我越来越接近

所以任何相关的帮助,而不是随机的post声称作为答案将是有益的

您可以尝试的一个想法是创build一个GSI,它将允许使用您的数据列匹配来查询数据。

然后,您可以使用此GSI查询项目,如果有数据,则可以更新项目并将其写回。

唯一的潜在缺点是,这基本上是一个check-then-act,这可能或可能不是你的问题。 如果这是一个问题,您可以尝试使用DynamoDB事务 ,但是它们只是针对Java客户端实现的,并且成本很高 。