使用哈希值数组的 AWS DynamoDB 扫描和 FilterExpression
我很难找到在 DynamoDB 表上使用 FilterExpression 进行扫描的有用示例.我在浏览器中使用 javascript SDK.
I am having a hard time finding a useful example for a scan with FilterExpression on a DynamoDB table. I am using the javascript SDK in the browser.
我想扫描我的表并仅返回那些在我传递给 Scan 的数组中具有 HASH 字段UID"值的记录
I would like to scan my table and return only those records that have HASH field "UID" values within an array I pass to the Scan
假设我有一个唯一 id 数组,它们是我的表的哈希字段我想从我的 DynamoDB 表中查询这些记录.
Lets say I have an array of unique ids that are the hash field of my table I would like to query these records from my DynamoDB table.
如下图
var idsToSearch=['123','456','789'] //array of the HASH values I would like to retrieve
var tableToSearch = new AWS.DynamoDB();
var scanParams = {
"TableName":"myAwsTable",
"AttributesToGet":['ID','COMMENTS','DATE'],
"FilterExpression":"'ID' in "+idsToSearch+""
}
tableToSearch.scan(scanParams), function(err,data){
if (err) console.log(err, err.stack); //error handler
else console.log(data); //success response
})
推荐答案
你应该使用 IN
操作符.将 Placeholders 用于属性名称和属性值也更容易.不过,我建议不要在这种情况下使用 Scan
.听起来您已经有了要查找的哈希键属性值,因此使用 BatchGetItem
.
You should make use of the IN
operator. It is also easier to use Placeholders for attribute names and attribute values. I would, however, advise against using a Scan
in this case. It sounds like you already have the hash key attribute values that you want to find, so it would make more sense to use BatchGetItem
.
无论如何,这就是你在 Java 中的做法:
Anyways, here is how you would do it in Java:
ScanSpec scanSpec = new ScanSpec()
.withFilterExpression("#idname in (:val1, :val2, :val3)")
.withNameMap(ImmutableMap.of("#idname", "ID"))
.withValueMap(ImmutableMap.of(":val1", "123", ":val2", "456", ":val23", "789"));
ItemCollection<ScanOutcome> = table.scan(scanSpec);
我会想象使用 Javascript SDK 会是这样的:
I would imagine using the Javascript SDK it would be something like this:
var scanParams = {
"TableName":"myAwsTable",
"AttributesToGet": ['ID','COMMENTS','DATE'],
"FilterExpression": '#idname in (:val1, :val2, :val3)',
"ExpressionAttributeNames": {
'#idname': 'ID'
},
"ExpressionAttributeValues": {
':val1': '123',
':val2': '456',
':val3': '789'
}
}
相关文章