Sie können den Select
Parameter verwenden undCOUNT
in der Anfrage verwenden. Es "gibt die Anzahl der übereinstimmenden Elemente zurück und nicht die übereinstimmenden Elemente selbst". Wichtig , wie von Saumitra R. Bhave in einem Kommentar angesprochen : "Wenn die Größe der Abfrage-Ergebnismenge größer als 1 MB ist, stellen ScannedCount und Count nur einen Teil der Gesamtzahl der Elemente dar. Sie müssen mehrere ausführen Abfragevorgänge, um alle Ergebnisse abzurufen " .
Ich bin nicht mit PHP vertraut, aber hier ist, wie Sie es mit Java verwenden können. Und anstatt Count
(was ich vermute, ist eine Funktion in PHP) auf dem zu verwenden 'Items'
, können Sie den Count
Wert aus der Antwort verwenden - $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();
Wenn Sie die WHERE
Klausel nicht emulieren müssen , können Sie eine DescribeTable
Anforderung verwenden und die resultierende Elementanzahl verwenden, um eine Schätzung zu erhalten.
Die Anzahl der Elemente in der angegebenen Tabelle. DynamoDB aktualisiert diesen Wert ungefähr alle sechs Stunden. Letzte Änderungen werden möglicherweise nicht in diesem Wert berücksichtigt.
Ein wichtiger Hinweis aus der Dokumentation, wie er von Saumitra R. Bhave in den Kommentaren zu dieser Antwort erwähnt wurde:
Wenn die Größe der Query
Ergebnismenge größer als 1 MB ist ScannedCount
und Count
nur einen Teil der Gesamtzahl der Elemente darstellt. Sie müssen mehrere Query
Vorgänge ausführen , um alle Ergebnisse abzurufen (siehe Paginieren von Tabellenabfrageergebnissen ).