Как получить количество элементов из DynamoDB?

Я хочу знать количество элементов с запросом DynamoDB.

Я могу запросить DynamoDB, но я хочу знать только "общее количество элементов".

например, ' выберите COUNT (*) FROM ... ГДЕ...'в MySQL

$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 слишком велик. И это превысит пределы размера запроса.

Мне нужна помощь.

7 ответов


можно использовать


С aws dynamodb cli вы можете получить его через сканирование следующим образом:

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

ответ будет выглядеть примерно так:

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

обратите внимание, что данная информация в режиме реального времени, в отличие от описания-таблицы api


также можно увидеть из пользовательского интерфейса. Перейдите на вкладку Обзор таблицы, вы увидите количество элементов. Надеюсь, это кому-то поможет.


подобно Java в PHP только установите параметр Select со значением 'COUNT'

$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)
        )
    )
 ),
 'Select' => 'COUNT'
));

и подходит к нему так :

echo $result ['Count'];

, а как Saumitra упомянутый выше будьте осторожны с resultsets largers чем 1 MB, в этом случае используйте LastEvaluatedKey, пока он не вернет null, чтобы получить последнее обновленное значение счетчика.


Если вам случится, чтобы добраться сюда, и вы работаете с C#, вот код:

var cancellationToken = new CancellationToken();

var request = new ScanRequest("TableName") {Select = Select.COUNT};

var result = context.Client.ScanAsync(request, cancellationToken).Result;

totalCount = result.Count;

я использовал scan для получения общего количества требуемого имени таблицы.Ниже приведен фрагмент кода Java для same

Long totalItemCount = 0;
do{
    ScanRequest req = new ScanRequest();
    req.setTableName(tableName);

    if(result != null){
        req.setExclusiveStartKey(result.getLastEvaluatedKey());
    }

    result = client.scan(req);

    totalItemCount += result.getItems().size();

} while(result.getLastEvaluatedKey() != null);

System.out.println("Result size: " + totalItemCount);

Это решение для пользователей AWS JavaScript SDK, оно почти такое же для других языков.

результат.данные.Граф даст вам то, что вы ищете

 apigClient.getitemPost({}, body, {})

    .then(function(result){

        var dataoutput = result.data.Items[0];

        console.log(result.data.Count);
  }).catch( function(result){

});