这是我的 DynamoDB 当前数据:
我的目标是创建一个查询,该查询过滤组集中的结果(类似于“默认”),然后按优先级排序,然后将结果过滤到loggedIn == true和status ==idle的结果。
在 SQL 中它会是这样的
SELECT *
FROM userstatustable
WHERE group == "default"
AND loggedIn == true AND status == "idle"
ORDER BY priority DESC
LIMIT 1
我将如何创建一个查询来执行此操作?
以下是 DynamoDB 表的 serverless.yml 文件描述。
userStatusTable: #This table is used to track a users current status.
Type: AWS::DynamoDB::Table
Properties:
TableName: ${self:custom.userStatusTable}
AttributeDefinitions: #UserID in this case will be created once and constantly updated as it changes with status regarding the user.
- AttributeName: userId
AttributeType: S
KeySchema:
- AttributeName: userId
KeyType: HASH
ProvisionedThroughput:
ReadCapacityUnits: ${self:custom.dynamoDbCapacityUnits.${self:custom.pstage}}
WriteCapacityUnits: ${self:custom.dynamoDbCapacityUnits.${self:custom.pstage}}
我尝试过的事情:
下面是我目前的代码:
const userStatusParams = {
TableName: process.env.USERSTATUS_TABLE,
FilterExpression: "loggedIn = :loggedIn and #s = :status and contains(#g,:group) ",
//Limit: 1,
ExpressionAttributeValues: {
":loggedIn": true,
":status" : "idle",
":group" : "DEFAULT"
},
ExpressionAttributeNames: {"#s": "status","#g" : "group"}
};
var usersResult;
try {
usersResult = await dynamoDbLib.call("scan", userStatusParams);
console.log(usersResult);
}catch (e) {
console.log("Error occurred querying for users belong to group.");
console.log(e);
}
这使用扫描并且能够返回所有符合条件的结果......但是它不按优先级对结果进行排序按降序排列。
Note:状态和组显然是保留关键字,所以我不得不使用ExpressionAttributeNames
来解释这一点。另请注意,该表最终将包含数千个用户。