2016-07-12 8 views
0

Ich studiere DynamoDB mit Schienen und ich habe Zweifel. Ich kann keine Lösung im Web finden, also Wenn Sie es lösen können, werde ich danken.DynamoDB enthält Wert in einem Array mit Schienen

Der Zweifel ist, wie kann ich Werte in Array auf einer Tabelle gespeichert finden, zum Beispiel:

ich eine Menge Daten in my_table habe, wo es Felder „Zahlen“ genannt, die Arrays wie:

[1,2,3,4] 
[3,4,5,6] 
[1,3,4,7] 
[4,7,8,10] 
[8,9,12,14] 
[12,14,16,20] 

Also, ich möchte alle Einträge auswählen, die Zahlen 1,3,4 enthält. In diesem Fall vier Ergebnisse.

So ist mein Code

result = dynamodb.scan({ 
    table_name: "my_table", 
    select: "ALL_ATTRIBUTES", 
    attributes_to_get: ["numbers"], 
    scan_filter: { 
     "numbers" => { 
      attribute_value_list: [1,3,4], 
      comparison_operator: "CONTAINS" 
     } 
    } 
}) 

Aber ich bekomme diese Fehlermeldung: Eine oder mehrere Parameterwerte waren ungültig: Ungültige Anzahl von Argumenten (e) für die ComparisonOperator ENTHÄLT

Wie kann ich dies tun Aktion mit Dynamo DB?

Vielen Dank

Antwort

0

Versuchen Sie dies und lassen Sie mich wissen, ob es funktioniert, ich weiß aus Erfahrung, dass DynamoDB sehr schmerzhaft ist, zu filtern.

result = dynamodb.scan(
    table_name: 'my_table', 
    expression_attribute_values: { 
    ':one' => 1, 
    ':two' => 2, 
    ':three' => 3, 
    ':four' => 4 
    }, 
    filter_expression: 'contains(numbers, :one) OR contains(numbers, :two) OR contains(numbers, :three) OR contains(numbers, :four)' 
) 

Ich kann nicht noch einfacher an nichts denken, die Methode, die Sie als veraltet markiert verknüpft ist, stattdessen sollten Sie expression_attribute_values und filter_expression verwenden.

+0

Hallo Nabeel, Ich werde es versuchen, aber der Filter ist dynamisch, dann kann dieser Weg ungewöhnlich sein. Aber dieses Beispiel gibt mir ein Licht ... ich werde testen. – sidneivl

+0

Eine Sache zu beachten ist, dass Scan-Filter immer noch die gleichen Kosten in Bezug auf Artikel lesen/schreiben, als ob es eine vollständige Überprüfung wäre. Dies liegt daran, dass die Filterung angewendet wird, nachdem die Daten abgerufen wurden, aber bevor sie an Sie zurückgegeben werden. Sie könnten sie also sehr gut selbst filtern (dies könnte jedoch die Paginierung, die Größenbeschränkung von 1 MB usw. umfassen). –

+0

Ich habe Ihren Weg versucht und einen anderen Weg, aber jetzt habe ich "Stack-Level zu tief" -Fehler, also habe ich Dynamodb und zurück zu Postgres, ich habe das Ergebnis in 2 Zeilen Code. In Zukunft werde ich DynamoDB versuchen, vielleicht ... – sidneivl

Verwandte Themen