![](/img/trans.png)
[英]DynamoDB ConditionExpression without using ExpressionAttributeValues
[英]How to update one attribute value using ConditionExpression without affecting other attributes - DynamoDB
我需要更新 DynamoDB 表項的屬性值。 僅當usersIDs數組與當前用戶的用戶 ID一致時,重復部分才應更新。
然后我創建了 ConditionExpression 並運行它。
var metricsParams = {
TableName: table,
Key:{
"metricsID" : metricsID,
},
UpdateExpression: "SET fans.orgID = :orgIDNew, fans.orgName = :orgNameNew, fans.noOfGamesPlayed = fans.noOfGamesPlayed + :val, Moment.datePlayed = :dateNew, Moment.monthPlayed = :monthNew, Moment.week = :weekNew, Moment.usersIDs = list_append(Moment.usersIDs, :usersNew), Moment.repeats = list_append(Moment.repeats, :repeateUsers)",
ConditionExpression: "contains(Moment.repeats, :repeateUsers)",
ExpressionAttributeValues:{
":orgIDNew": body.team.id,
":orgNameNew": body.team.domain,
":val": 1,
":dateNew" : Moment().format('LL'),
":monthNew" : Moment().format("MMMM"),
":weekNew" : Moment().format('WW'),
":usersNew" : [body.user.id],
":repeateUsers": [body.user.id]
},
ReturnValues:"UPDATED_NEW"
};
console.log("Attempting a conditional update...");
metricsDoc.update(metricsParams, function(err, data) {
if (err) {
console.error("Unable to update item. *from id update* Error JSON:", JSON.stringify(err, null, 2));
} else {
console.log("UpdateItem succeeded: FROM DYNAMODB METRICS**", JSON.stringify(data, null, 2));
但是當我添加這個 ConditionExpression 時,其他屬性也會因此而影響。 那么我該如何解決這個問題。 我需要創建單獨的 UpdateExpression 嗎?
你是對的。 如果您有多個條件,則需要多個操作。 一個操作可以有 0-1 個條件,這適用於整個操作:
Docs:如果條件表達式為真,則操作成功; 否則,操作失敗
鑒於您當前的結構,這里有兩個選項:
list_append(Moment.repeats, :repeateUsers)
不能防止添加重復條目)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.