2016-07-12 5 views
0

を使用して、配列内の値が含まれています。 ウェブ上で解決策を見つけることができないので、解決できれば感謝します。DynamoDBのは、私はレールを使用してDynamoDBのを勉強していると私は疑問を持ってレール

:私はフィールドのような配列である「数字」が呼ばれ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が含まれているすべてのエントリを選択します。この場合、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" 
     } 
    } 
}) 

あるしかし、私はこのエラーを取得する:1つの以上のパラメータ値が無効であった。ComparisonOperator

私はこれをどのように行うことができますCONTAINSの引数の数が無効です(複数可)ダイナモDBを使ったアクション?

どうもありがとう

答えて

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

こんにちはナビール、 その後、この方法は、珍しいことができ、私はそれを試してみますが、フィルタは動的です。 しかし、この例で私に光を与える...私はテストします。注意すべき – sidneivl

+0

ことの一つは、アイテムは、それがフルスキャンであるかのように読み取り/書き込みのスキャンフィルタリングはまだ用語であなたと同じ費用がかかりますということです。これは、データが取得された後に返される前にフィルタリングが適用されるためです。ただし、ページングや1 MBのサイズ制限などを処理する必要があります。 –

+0

、私はあなたの方法と別の方法を試してみましたが、今私は、「スタックレベルが深すぎ」エラーを得たので、私はDynamoDBのを終了し、バックのpostgresに、私は2行のコードでの結果を得ました。 将来私はDynamoDBを試してみるつもりです... – sidneivl

関連する問題