使用节点J

时间:2015-11-14 12:52:56

标签: node.js amazon-web-services set updates amazon-dynamodb

我正在尝试做一个最简单的操作"更新"在发电机数据库列表中。

表格式 -

businessId : String, customers: StringSet,  itemCode : NumberSet

我通过put插入了一个条目 -

bussinessId = "sampleBusiness", cuatomers 0: "cust1", itemCode 0: 4554

我想使用更新添加更多项目,这是我尝试过的 -

 var updateRequest = {  
    'TableName' : tableName,
    'Key' : {
        'businessId' : {
            "S" : businessId
        }
    },
    'UpdateExpression' : "SET itemCode[2] =:attrValue",    
    'ExpressionAttributeValues' : {
        ':attrValue' : {
            "N" : "564564"
        }
    }
};

这给了我错误 -

  

文档中提供的文档路径无效

我想添加新条目,所以也尝试了这个 -

var sm = [];
sm[0] = "56465";

//Add business to 
var updateRequest = {  
    'TableName' : tableName,
    'Key' : {
        'businessId' : {
            "S" : businessId
        }
    },
    'UpdateExpression' : 'SET #attrName = list_append(#attrName, :attrValue)',
    'ExpressionAttributeNames' : {
        '#attrName' : 'itemCode'
    },
    'ExpressionAttributeValues' : {
        ':attrValue' : {
            "NS" : sm
        }
    }
  };

这给出了:

  

ValidationException:无效的UpdateExpression:运算符或函数的操作数类型不正确;运算符或函数:list_append,操作数类型:NS

也尝试了这个 -

 ':attrValue' : {
                "N" : "4564"
            }

但同样的错误。

根据http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html中提供的示例,它会在FiveStar审核列表中添加新元素。表达式属性名称#prProductReviews;属性值:r是一个单元素列表。如果列表先前有两个元素,[0]和[1],则新元素将为[2]。

SET #pr.FiveStar = list_append(#pr.FiveStar, :r) 

表示:r是一个元素列表

我在这里遗漏了一些东西。请求任何人可以提供帮助。对此持续了很长时间。我只想使用nodeJS在dynamo db中添加元素。

2 个答案:

答案 0 :(得分:0)

看起来像这样:

'ExpressionAttributeValues' : {
    ':attrValue' : {
        "NS" : sm
    }
}

应该是这样的:

'ExpressionAttributeValues' : {
    ':attrValue' : {
        "S" : sm
    }
}

或者您需要将此值sm[0] = "56465";转换为数字Number("56465"),并将:attrValue数据类型"S"更改为"N"。取决于您如何配置表格。

您也应该将:attrValue指定为"S" : sm[0],因为现在您正在传递"S"整个数组。

答案 1 :(得分:-2)

我得到了一个合适的解决方案

var item = {"endTime": "7pm", "imageName": "7abcd", "startTime": "7pm"};

dynamo.updateItem({
    TableName:'TableName',
    Key:{"BucketName":"abcdefg" }, 
    UpdateExpression : "SET #attrName = list_append(#attrName, :attrValue)",
    ExpressionAttributeNames : {
        "#attrName" : "ImageLists"
    },
    ExpressionAttributeValues : {
        ':attrValue' : [item]
    }
},function(err, data) {
    if (err)
        console.log(err);
    else
        console.log(data)
});