Javascript 使用最新时间戳和;电子邮件ID
我想用emailId过滤用户,并获取最近的行条目,即根据要显示的电子邮件ID获取用户的最新数据。在我的例子中,subscriptionID是分区键。没有辅助索引或排序键。有必要这样做吗?或者其他我应该选择的方法 我的Dynamo查询:-Javascript 使用最新时间戳和;电子邮件ID,javascript,amazon-web-services,amazon-dynamodb,Javascript,Amazon Web Services,Amazon Dynamodb,我想用emailId过滤用户,并获取最近的行条目,即根据要显示的电子邮件ID获取用户的最新数据。在我的例子中,subscriptionID是分区键。没有辅助索引或排序键。有必要这样做吗?或者其他我应该选择的方法 我的Dynamo查询:- var docClient=new AWS.DynamoDB.DocumentClient({region:AWS.config.region}); 变量参数={ TableName:“许可证”, FilterExpression:“customerEmail
var docClient=new AWS.DynamoDB.DocumentClient({region:AWS.config.region});
变量参数={
TableName:“许可证”,
FilterExpression:“customerEmail=:email”,
表达式属性值:{
“:电子邮件”:电子邮件
},
};
docClient.scan(参数、函数(错误、数据){
如果(错误)
{
控制台日志(err);
}
其他的
{
console.log('length',data.Items.length);
console.log(数据项);
}
});
Ascan
是从DynamoDB获取数据的最昂贵的方式,在大多数情况下都应该避免
您当前正在使用subscriptionID作为分区密钥,这无助于通过客户电子邮件获取项目。最有效的方法是使用一个主键,用户email作为分区键,时间戳(购买日期)作为排序键。如果以这种方式存储数据,可以执行以下操作:
query(
TableName= 'License',
KeyConditionExpression= '#pk = :pk',
ExpressionAttributeNames={
'#pk': 'subscriptionID'
},
ExpressionAttributeValues={
':pk': { 'S': 'apandey@projitechinc.com' }
},
ScanIndexForward=False,
Limit=1
)
关于此操作,需要注意以下几点:
查询
操作,比扫描
操作效率更高ScanIndexForward=False
将使用排序键按降序排序(升序设置为true或省略)Limit=1
获取最高结果(例如最新条目)为了充分利用DynamoDB,您必须设计表以及如何存储数据以支持应用程序访问模式。如您所见,您当前的设计不容易支持所需的访问模式。有许多方法可以设计表来支持这种类型的查询,但这种模式在许多应用程序中很常见。A
scan
是从DynamoDB获取数据的最昂贵的方法,在大多数情况下应该避免
您当前正在使用subscriptionID作为分区密钥,这无助于通过客户电子邮件获取项目。最有效的方法是使用一个主键,用户email作为分区键,时间戳(购买日期)作为排序键。如果以这种方式存储数据,可以执行以下操作:
query(
TableName= 'License',
KeyConditionExpression= '#pk = :pk',
ExpressionAttributeNames={
'#pk': 'subscriptionID'
},
ExpressionAttributeValues={
':pk': { 'S': 'apandey@projitechinc.com' }
},
ScanIndexForward=False,
Limit=1
)
关于此操作,需要注意以下几点:
查询
操作,比扫描
操作效率更高ScanIndexForward=False
将使用排序键按降序排序(升序设置为true或省略)Limit=1
获取最高结果(例如最新条目)为了充分利用DynamoDB,您必须设计表以及如何存储数据以支持应用程序访问模式。如您所见,您当前的设计不容易支持所需的访问模式。有许多方法可以设计表来支持这种类型的查询,但这种模式在许多应用程序中很常见。如果我理解您的问题,您希望能够查询与给定电子邮件地址关联的最新项目。您可以添加分区键=电子邮件地址和排序键=时间戳的GSI,然后使用ScanIndexForward=false和Limit=1查询分区键=电子邮件地址以获取最新的。非常感谢您的帮助。如果我理解您的问题,您希望能够查询与给定电子邮件地址关联的最新项目。您可以添加分区键=电子邮件地址且排序键=时间戳的GSI,然后使用ScanIndexForward=false和Limit=1查询分区键=电子邮件地址以获取最新的。非常感谢您的帮助。非常感谢。谢谢你的帮助,我很高兴能帮上忙。祝你好运谢谢。谢谢你的帮助,我很高兴能帮上忙。祝你好运