Neu in DynamoDB und müssen die obige Abfrage ausführen, aber nicht sicher, wie. Hier ist, was ich gerade versuche, und ich bekomme den Fehler unten.
Übrigens, ich benutze diese Javascript-Bibliothek mit DynamoDB: Ссылка
%Vor%Der Fehler, den ich bekomme, ist wie folgt:
ValidationException: Ein oder mehrere Parameterwerte waren ungültig: ComparisonOperator IN ist nicht gültig für L AttributeValue-Typ
KeyConditions
unterstützt nicht die IN
operator. Die Dokumentation für KeyCondition
sagt, welche Operatoren es unterstützt:
Für KeyConditions sind nur die folgenden Vergleichsoperatoren verfügbar unterstützt:
EQ
|LE
|LT
|GE
|GT
|BEGINS_WITH
|BETWEEN
Der Operator EQ
funktioniert auch nur für einen einzelnen Wert:
EQ
: Gleich.AttributeValueList kann nur einen AttributeValue vom Typ String, Number oder Binary (kein Settyp) enthalten. Wenn ein Element ein AttributeValue-Element eines anderen als des in der Anforderung angegebenen Typs enthält, stimmt der Wert nicht überein. Zum Beispiel ist
{"S":"6"}
nicht gleich{"N":"6"}
. Außerdem stimmt{"N":"6"}
nicht mit{"NS":["6", "2", "1"]}
überein.
Die Einschränkungen sind im Grunde die gleichen für KeyConditionExpression
, das ist die neuere, empfohlene Methode zum Filtern von Schlüsseln. Hier ist ein Ausschnitt aus der Dokumentation (Hervorhebung von mir):
Die Bedingung muss einen Gleichheitstest für einen einzelnen Hash-Schlüssel durchführen Wert. Die Bedingung kann auch einen von mehreren Vergleichstests durchführen auf einem einzelnen Bereich Schlüsselwert . Abfrage kann KeyConditionExpression verwenden Abrufen eines Elements mit einem bestimmten Hash- und Bereichsschlüsselwert oder mehrere Elemente, die denselben Hash-Schlüsselwert aber unterschiedliche Bereichsschlüsselwerte haben
In Ihrem Fall könnten Sie die % co_de erstellen % in ähnlicher Weise wie in diese Antwort beschrieben .
Die einzige Möglichkeit, die IN-Anweisung zu verwenden, besteht darin, eine Filterbedingung zu verwenden. Der Filterausdruck kann jedoch nur Nicht-Primärschlüsselattribute enthalten. Daher ist die Abfrage, die Sie erreichen möchten, NICHT mit Primärschlüsseln möglich. So etwas Ähnliches
%Vor%Ist nur mit Nicht-Primärschlüsselattributen möglich
Die Problemumgehung, die Sie anwenden können, besteht darin, den Stapel zu verwenden Anstatt also in einem Aufruf ein Abfrage-Frage-Vielfaches auszugeben, muss jede Bedingung einen Wert aus Ihrem ids-Array enthalten.
Wenn es sich um Batch-Elemente handelt, sollten Sie die Lesekapazitätseinheiten beachten ( Batch-Element in node.js ).
Tags und Links javascript node.js amazon-dynamodb