2017-02-28 7 views
0
{ 
    "name": "testcase #1", 
    "words": [ 
    "the", 
    "quick", 
    "brown", 
    "fox", 
    "jump", 
    "over", 
    "the", 
    "lazy", 
    "dog" 
    ], 
    "values": [ 
    1, 
    1, 
    4, 
    4, 
    1, 
    6, 
    1, 
    3, 
    5 
    ] 
}, 
{ 
    "name": "testcase #2", 
    "words": [ 
    "the", 
    "second", 
    "test", 
    "about", 
    "jump", 
    "over", 
    "the", 
    "lazy", 
    "dog" 
    ], 
    "values": [ 
    3, 
    2, 
    4, 
    5, 
    3, 
    6, 
    4, 
    3, 
    1 
    ] 
} 

特定の「単語」が持つ特定の値の範囲内にあるすべてのレコードを検索するには、どのようにdynamoDbにクエリを作成しますか?その上にあるレコードの例では は、次のいずれかと一致し、一致するレコード全体を返します。JSONサブ配列の検索

また、値が3未満のすべての「単語」を返すように求めることもできます。

"the", "quick", "second", "dog" 

アイブ氏の周りに検索するが、主要な性能とコストの影響を与える可能性がテーブル全体をスキャンすることなく、これを行う方法の明確な文書を見つけることができませんでした。

+0

何を試しましたか? –

+0

実際にはあまりありません。どこから始めるべきかわからない... –

答えて

1

実際には、上記の構造を支柱に設けて、が実現できません。をフィルタ式にすることができます。

データモデルの変更案: -

ストアmap DynamoDBのデータ型としてwords属性。

例: -

Storing words as map

問合せ: -

あなたはDynamoDBのクエリAPIを使用したい場合、あなたはHASHキーデータを持たなければならないことに注意してください。ハッシュキーデータがない場合は、スキャンAPIを使用するか、GSI(グローバルセカンダリインデックス)が必要です。カウント言葉でデータをフィルタリングする

例クエリ式: -

は、私はハッシュキー値がFilterExpressionKeyConditionExpressionと他の属性で「1 TestCaseの」を使用していることに注意してください。

ハッシュキーがない場合は、Scan APIを使用する必要があります。

var table = "testcase"; 

var params = { 
    TableName : table, 
    KeyConditionExpression : '#name = :hkey', 
    FilterExpression: 'words.the < :wordval1 and words.the = :wordval2 and words.brown > :wordval3', 
    ExpressionAttributeNames : { 
     '#name' : 'name' 
    }, 
    ExpressionAttributeValues : { 
     ':hkey' : 'testcase 1', 
     ':wordval1' : 2, 
     ':wordval2' : 1, 
     ':wordval3' : 3 
    } 
}; 

docClient.query(params, function(err, data) { 
    if (err) { 
     console.error("Unable to read item. Error JSON:", JSON.stringify(err, 
       null, 2)); 
    } else { 
     console.log("GetItem succeeded:", JSON.stringify(data, null, 2)); 
    } 
}); 
+0

ありがとう、私はあなたの解決策を研究します。実際の全体の構造ははるかに複雑ですが、それは私に良い出発点を与えるでしょう。私は一度それを見ると、より多くの質問で私は戻ってくるかもしれません。 –

+0

実際には、上の例では、 "the"という単語が重複していて、別の数値に関連付けられている必要があります。構造全体では、私はここに表示されていないが、大きな構造に存在する各単語に関連するより多くの情報も持っています。 –