在项目值的情况下,DynamoDB更新项目

时间:2017-06-07 13:19:22

标签: node.js amazon-dynamodb

我试图编写一个查询,只有当值"采取时才更新项目"属性不等于"是"。使用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) {
  });

2 个答案:

答案 0 :(得分:0)

我认为. ├── Auth.class ├── Auth.java ├── libs ├── Search$1.class ├── Search.class ├── Search.java └── youtube.properties 1 directory, 6 files 存在问题。 ConditionExpression是属性名称。它应该进入:p

ExpressionAttributeNames

答案 1 :(得分:0)

属性名称必须始终以字符开头,而不是用于属性值 NOT 属性名称。)您实际上正在比较条件中的2个字符串&#34; info.taken&#34;和&#34;是&#34;总是返回False!而不是&#39; info.taken&#39;属性值为&#34;是&#34;。

您应该将条件表达式更改为以下内容:

ConditionExpression: '#p <> :u',

,您的属性值为:

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

并添加:

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

来自AWS DynamoDB Doc:

  

在表达式中使用#字符取消引用属性名称。

     

以:字符开头的标记是表达式属性值,它们是运行时实际值的占位符。