Próbuję uruchomić pewne operacje dynamodb z aws.dynamotb.documentClient z modułu AWS-SDK, ale nie mogę znaleźć łatwego rozwiązania do wyboru elementów, w których atrybut nie jest równa w tablicy wartości.

e.g atrybut & lt; & gt; ["Value1", "Value2]

Jest to równoważne prostej typowej operacji SQL w formie:

select * from sometable where attribute not in("value1", "value2"...);

Po wypróbowaniu innego skanowania i QueryFilter po dokumentacji Tutaj Wydaje się, że atrybutovaluelist dla NE i Not_Contains nie akceptuje wielu wartości.

Chcę dotrzeć do wyników, jak pokazano poniżej, bez konieczności definiowania wielu "i" zapytań Wpisz opis obrazu tutaj

Od tego czasu dotarłem do tego rozwiązania, ale wydaje się niezdarne i musiałem pisać logikę, aby utworzyć ciąg warunków filtra i ekspresjonatorów, ponieważ warunek filtra jest dynamiczny.

FilterExpression: 'answer <> :answer1 AND answer <> :answer2',
        ExpressionAttributeValues : {
            ':answer1' : "test1",
            ':answer2' : "test2"
        }

Mam zatem 2 pytania:

  1. Czy jest lepszy sposób na zrobienie tego?
  2. Czy istnieje limit długości do ciągów keyconditionexpression? Jestem pewien, że jest, ale nie mogę znaleźć informacji o tym informacje o tym.
1
KSheng 27 październik 2020, 18:52

1 odpowiedź

Najlepsza odpowiedź
  1. Nie ma innego sposobu na osiągnięcie tego, czego potrzebujesz. Jeśli wszystkie te wartości mają coś wspólnego, a wiesz o tym w czasie zapisu, możesz je wstawić z pewnym prefiksem i utwórz GSI, gdzie będą kluczem sortowania. W takim przypadku będziesz mógł je zapytać według prefiksu w wyrażeniu stanu klucza. W przeciwnym razie, co zasugerowałeś, jest twoją jedyną opcją.
  2. 4kb dla wszystkich wyrażeń połączonych. Jak opisano w Parametry ekspresyjne :

Parametry ekspresyjne obejmują projekcję, warunkową naczelność, aktualizacji aktualizacji i filtrowania.

Maksymalna długość dowolnego ciągu ekspresyjnego wynosi 4 KB. Na przykład rozmiar warunkowania A = B oznacza 3 bajty.

0
Shay Ashkenazi 28 październik 2020, 08:46