DynamoDB - 读取项目并返回数组大小

时间:2016-11-30 07:17:01

标签: amazon-dynamodb

我在DynamoDB表中有一个项目。该项目如下所示:

{
  data: [ 1, 2, 3, 4, 5, 6 ]
  more_data: [ 2, 3, 4, 5, 6, 7 ]
}

使用ProjectionExpression,我可以执行GetItem并仅返回data,或返回data[0]。但有两点我无法弄清楚:

  • 如何返回数组大小? data.SIZE
  • 如何返回数组的子集? data[2-10]

ProjectionExpression文档似乎无法涵盖这一点。有线索吗?

2 个答案:

答案 0 :(得分:1)

1)DynamoDB没有获取 List 属性大小的功能。可以使用length函数在客户端找到数组元素的大小。

data.Item.records.length给出数组元素records的长度。 records是DynamoDB表中的列表。

docClient.get(params, function(err, data) {
    if (err) {
        console.error("Unable to read item. Error JSON:", JSON.stringify(err, null, 2));
    } else {
        console.log("GetItem succeeded:", JSON.stringify(data, null, 2));
        console.log(data.Item[0].records.length);
    }
});

2)注册子数组,语法应该是这样的。 DynamoDB不支持'records[1-3]'

等范围
ProjectionExpression: 'records[0], records[1]',

3)DynamoDB没有获取List中最后一项的功能。但是,您可以在客户端获取它。我有records列表。我使用itemValue.records[itemValue.records.length - 1]

获得了最后一个元素
docClient.query(params, function(err, data) {
    if (err) {
        console.error("Unable to read item. Error JSON:", JSON.stringify(err,
                null, 2));
    } else {
        console.log("GetItem succeeded:", JSON.stringify(data, null, 2));

        data.Items.forEach(function(itemValue) {
            console.log (itemValue.records[itemValue.records.length - 1]);
        });     
    }
});

答案 1 :(得分:1)

这三个问题最好分三页发布。

对于(3):

在当前(2021 年 6 月 22 日)example of documentation 中,他们使用 size(info.actors) 来获取大小。 您可以使用:'size(#list)' 来获取列表的大小。