DynamoDB Javascript - Abfrage nach Primärschlüssel und Array von Bereichsschlüsseln?

8

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

    
ac360 02.06.2015, 07:11
quelle

2 Antworten

3

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 .

    
mkobit 02.06.2015 20:50
quelle
1

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 ).

    
gkatzioura 04.03.2017 09:07
quelle