2017-07-09 5 views
1

Ich versuche, meinen Tisch Tinpon mit einem sekundären Index ergibt eine Partition-Schlüssel Kategorie und sortierschlüssel tinponId abzufragen. Mein Ziel ist es, Gegenstände mit bestimmten tinponIds auszuschließen. Mein erster Gedanke wäre, einen negativen Vergleich zu machen: keyConditionExpression = "category = :category AND tinponId != :tinponId" aber es gibt nur einen Vergleich = Vergleich. Dann habe ich versucht, Serval andere Methoden (mit leider nicht vorhanden): keyConditionExpression = "category = :category NOT tinponId = :tinponId" keyConditionExpression = "category = :category AND tinponId <> :tinponId" keyConditionExpression = "category = :category AND tinponId < :tinponId AND tinponId > :tinponId" Nach the AWS guide gibt es keine nicht gleich comparisson. Warum? Und gibt es eine Möglichkeit, DynamoDB abzufragen, eine Liste von IDs ausgeschlossen oder ist die einzige Option, um eine ganze Reihe von Elementen abzurufen und sie später manuell zu filtern?Warum gibt es in DynamoDB-Abfragen keinen Vergleich ** nicht gleich?

Antwort

3

Die KeyConditionExpression erlaubt nicht gleich für den Sortierschlüssel. Sie können jedoch die "Nicht gleich, d. H. <>" in FilterExpression verwenden.

KeyConditionExpression : 'category = :category',  
FilterExpression : 'tinponId <> :tinponIdVal', 
ExpressionAttributeValues : { 
    ':category' : 'somevalue', 
    ':tinponIdVal' : 'somevalue' 
} 
+0

Ok mein nächstes Problem ist, dass ich gewählt habe ** ** tinponId als Primärschlüssel meiner ** ** Tinpon Tabelle und jetzt den Fehler 'Filterausdruck bekommen können nur Nicht-Primärschlüssel attributes' enthalten ist Gibt es eine andere Lösung, oder muss ich das Design meiner Tabelle ändern, um die vorgeschlagene Filtermethode zu verwenden? – Knowledge

+2

Sie müssen GSI verwenden (und möglicherweise GSI abfragen, das einen anderen Partitionsschlüssel hat) oder das Design der Haupttabelle ändern, um einen anderen Partitionsschlüssel zu haben. – notionquest

Verwandte Themen