如何从DynamoDB获得项目计数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (36)

我想知道使用DynamoDB查询的项目数量。

我可以查询DynamoDB,但我只想知道“项目总数”。

例如,MySQL中的'SELECT COUNT(*)FROM ... WHERE ...'

$result = $aws->query(array(
 'TableName' => 'game_table',
 'IndexName' => 'week-point-index',
 'KeyConditions' => array(
    'week' => array(
        'ComparisonOperator' => 'EQ',
        'AttributeValueList' => array(
            array(Type::STRING => $week)
        )
    ),
    'point' => array(
        'ComparisonOperator' => 'GE',
        'AttributeValueList' => array(
            array(Type::NUMBER => $my_point)
        )
    )
 ),
));
echo Count($result['Items']);

如果$ result的数量是100,000,$ result是太大了。它会超出查询大小的限制。

我需要帮助。

提问于
用户回答回答于

你可以使用该Select参数并COUNT在请求中使用。它“返回匹配项目的数量,而不是匹配项目本身”。不熟悉PHP,但这里是你如何使用它与Java。然后Count'Items'可以使用Count响应中值来代替使用(我猜测它是PHP中的一个函数)- $result['Count']

final String week = "whatever";
final Integer myPoint = 1337;
Condition weekCondition = new Condition()
        .withComparisonOperator(ComparisonOperator.EQ)
        .withAttributeValueList(new AttributeValue().withS(week));
Condition myPointCondition = new Condition()
        .withComparisonOperator(ComparisonOperator.GE)
        .withAttributeValueList(new AttributeValue().withN(myPoint.toString()))

Map<String, Condition> keyConditions = new HashMap<>();
keyConditions.put("week", weekCondition);
keyConditions.put("point", myPointCondition);

QueryRequest request = new QueryRequest("game_table");
request.setIndexName("week-point-index");
request.setSelect(Select.COUNT);
request.setKeyConditions(keyConditions);

QueryResult result = dynamoDBClient.query(request);
Integer count = result.getCount();
用户回答回答于

随着aws dynamodb cli,你可以通过扫描得到它,如下所示:

aws dynamodb scan --table-name <TABLE_NAME> --select "COUNT"

返回将如下所示:

{
    "Count": 123,
    "ScannedCount": 123,
    "ConsumedCapacity": null
}

请注意,这些信息实时与describe-table API不同

扫码关注云+社区