簡體   English   中英

如何使用 ConditionExpression 更新一個屬性值而不影響其他屬性 - DynamoDB

[英]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:如果條件表達式為真,則操作成功; 否則,操作失敗

鑒於您當前的結構,這里有兩個選項:

  1. 進行兩次更新操作,一種是無條件的,一種是有條件的。 (注意list_append(Moment.repeats, :repeateUsers)不能防止添加重復條目)
  2. 進行查詢以檢索當前記錄,並在確定需要寫入的內容后,進行一次無條件更新操作。

暫無
暫無

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

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