簡體   English   中英

DynamoDB在商品價值的情況下更新商品

[英]DynamoDB update item in case of item's value

我試圖寫一個查詢,僅當值“ taken”屬性不等於“ yes”時才更新項目。 使用dynamoDB可以做到這一點嗎? 現在,dynamoDB不會檢查條件。 它會更新我的商品,並且不會檢查“拍攝”是否不等於“是”

  var params = {
      TableName:"usersRinger1",
      Key:{
          "userID": self.event.session.user.userId,
          "medicine": User.USERNAME.current.lastDrug
        },
        ConditionExpression: ':p <> :u',
        UpdateExpression: "set info.taken = :r, info.whatTime=:a",
        ExpressionAttributeValues:{
            ":r": "yes",
            ":a": actualTime,
            ':p' : 'info.taken',
            ':u' : "yes"
        },
        ReturnValues:"UPDATED_NEW"
    };
    docClient.update(params, function(err, data) {
  });

我認為ConditionExpression存在問題。 :p是屬性名稱。 它應該放入ExpressionAttributeNames

ExpressionAttributeNames : {
    ":p" : "info.taken"
},

屬性名稱必須始終以字符開頭,而不是:( 用於屬性值,而不是屬性名稱。)實際上,您正在比較條件“ info.taken”和“ yes”中的兩個字符串,它們始終返回False! 而不是'info.taken'屬性的值設置為“ yes”。

您應該將條件表達式更改為以下內容:

ConditionExpression: '#p <> :u',

並且您的屬性值包括:

ExpressionAttributeValues:{
    ':r': 'yes',
    ':a': actualTime,
    ':u' : 'yes'
    }

並添加:

ExpressionAttributeNames:{
    '#p' : 'info.taken'}

從AWS DynamoDB Doc:

在表達式中使用#字符可取消引用屬性名稱。

以:字符開頭的標記是表達式屬性值,它們是運行時實際值的占位符。

暫無
暫無

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

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