2016-07-12 29 views
0

我正在使用rails學習DynamoDB,並且我有疑問。 我無法在網上找到解決方案,所以如果你能解決它,我會感謝。DynamoDB包含使用rails的數組中的值

的疑問是我怎樣才能找到值到保存在一個表陣列,例如:

我在MY_TABLE大量的數據,其中有三個字段是數組類似的「數字」:

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

所以,我想選擇包含數字1,3,4的所有條目。在這種情況下有四個結果。

所以,我的代碼是

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" 
     } 
    } 
}) 

但我得到這個錯誤:一個或多個參數值無效:參數(S)的數量無效的CONTAINS ComparisonOperator

我該怎麼做採用發電機數據庫的行動?

非常感謝

回答

0

試試這個,讓我知道,如果它的作品,我從經驗中知道,DynamoDB是很痛苦的過濾。

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

我想不出什麼更簡單目前,您鏈接的方法被標記爲過時,而應該使用expression_attribute_valuesfilter_expression

+0

嗨Nabeel, 我會試試,但過濾器是動態的,那麼這種方式可能是不尋常的。 但這個例子給我一個燈......我會測試。 – sidneivl

+0

有一點需要注意的是,掃描過濾仍然會使您在項目讀取/寫入方面的成本與完全掃描相同。這是因爲過濾是在獲取數據之後應用的,但是在返回給您之前,您可以自己過濾它(但可能包括必須處理分頁,1 MB大小限制等)。 –

+0

我嘗試了你的方式和另一種方式,但現在我得到了「堆棧級別太深」的錯誤,所以,我退出Dynamodb並返回到Postgres,我得到了2行代碼的結果。 未來我會嘗試DynamoDB,也許...... – sidneivl

相關問題