【发布时间】:2017-11-16 20:08:37
【问题描述】:
我正在开发一个使用 DynamoDB 作为数据库的应用程序。 我有一个用户表,例如:
{
id: 1, (Primary Key)
name: "Indranil"
}
现在我的要求是,如果 id 类似:[1,5,8],我有数组,并且我想使用单个查询加载所有用户。
现在我在查询中使用 id 作为 keyConditionExpression,我可以一个接一个地获取每个用户数据,但是它会导致多个查询。
let readparams = {
TableName : "user",
KeyConditionExpression: "# = :",
ExpressionAttributeNames:{
"#": "id"
},
ExpressionAttributeValues: {
":id":1
}
};
然后我看到表达式中有一个“IN”操作,但不能在 KeyConditionExpression 中使用,它可以在 FilterExpression 中使用,但在 filterExpression 中我不能使用主键。此外,我不能只在查询中传递过滤器表达式,我还必须传递一个键表达式,但在我的情况下,我没有任何其他条件要检查。
let readparams = {
TableName : "user",
FilterExpression: "id IN (:id1, :id2)",
ExpressionAttributeValues: {
":id1":1,
":id2":1
}
};
所以最终我只剩下一个选择,在前端加载所有数据,然后在前端使用 id 过滤那些数据,但显然这根本不是一个好的解决方案。
有人可以在这里指出什么是最好的解决方案。
【问题讨论】: