我想根据列status_code查询dynamoDB表。我使用以下代码获取输出:
params = {
TableName : "Orders_" + environment,
IndexName: "StatusCode-StoreID-index",
KeyConditionExpression: "StatusCode = :status_code",
ExpressionAttributeValues: {
":status_code": "ST01"
},
ScanIndexForward: false,
Limit : ordersPageSize
};
这里我将status_code作为ST01传递。我的问题是传递多个值而不是ST01。 如何获取status_code值为ST01或ST02或ST03的记录?
答案 0 :(得分:0)
您可以在IN
上使用 FilterExpression
运算符。
params = {
TableName : "Orders_" + environment,
IndexName: "StatusCode-StoreID-index",
KeyConditionExpression: "StatusCode = :status_code1",
ExpressionAttributeValues: {
":status_code1": "ST01"
},
ScanIndexForward: false,
Limit : ordersPageSize
};
如果您想获得多种状态(即哈希键),可以使用batchGetItem
API。但是,batchGetItem
不支持索引。您只能在主表上使用此API。
答案 1 :(得分:0)
根据DynamoDB Query Documentation
排序键条件的有效比较如下:
- sortKeyName =:sortkeyval - 如果排序键值等于:sortkeyval,则为true。
- sortKeyName< :sortkeyval - 如果排序键值小于:sortkeyval。
,则为true- sortKeyName< =:sortkeyval - 如果排序键值小于或等于,则为true:sortkeyval。
- sortKeyName> :sortkeyval - 如果排序键值大于:sortkeyval。
,则为true- sortKeyName> =:sortkeyval - 如果排序键值大于或等于:sortkeyval,则为true。
- sortKeyName BETWEEN:sortkeyval1 AND:sortkeyval2 - 如果排序键值大于或等于:sortkeyval1且小于 或等于:sortkeyval2。
- starts_with(sortKeyName,:sortkeyval) - 如果排序键值以特定操作数开头,则为true。 (你不能使用这个功能 使用Number类型的排序键。)
注意,函数名称starts_with区分大小写。
因此,范围仅支持 AND 。 没有IN 。您也可以尝试使用 starts_with 。
您的方案可以转换为以下代码:
params = {
TableName : "Orders_" + environment,
IndexName: "StatusCode-StoreID-index",
KeyConditionExpression: "begins_with(StatusCode, :status_code)",
ExpressionAttributeValues: {
":status_code": "ST0"
},
ScanIndexForward: false,
Limit : ordersPageSize
};
我希望这会有所帮助。