Javascript AWS Dynamodb查询-使用条件从表中获取项
有一个带字段的Dynamo表:Javascript AWS Dynamodb查询-使用条件从表中获取项,javascript,node.js,database,amazon-dynamodb,aws-sdk,Javascript,Node.js,Database,Amazon Dynamodb,Aws Sdk,有一个带字段的Dynamo表: 电子邮件(主要) 房客 其他东西 我想获取电子邮件中包含“mike”的所有项目 在我的nodejs服务器中,我有以下代码 const TableName= 'UserTable'; const db = new aws.DynamoDB(); const email = 'mike.green@abc.com' params = { TableName: userTableName, KeyConditionExpres
- 电子邮件(主要)
- 房客
- 其他东西
const TableName= 'UserTable';
const db = new aws.DynamoDB();
const email = 'mike.green@abc.com'
params = {
TableName: userTableName,
KeyConditionExpression: '#email = :email',
ExpressionAttributeNames: {
'#email': 'email',
},
ExpressionAttributeValues: {
':email': { S: email },
},
};
db.query(params, (err, data) => {
if (err) {
reject(err);
} else {
const processedItems = [...data.Items].sort((a, b) => a.email < b.email ? -1 : 1);
const processedData = { ...data, Items: processedItems };
resolve(processedData);
}
consttablename='UserTable';
const db=新的aws.DynamoDB();
const email='迈克。green@abc.com'
参数={
TableName:userTableName,
KeyConditionExpression:“#email=:email”,
表达式属性名称:{
"email":"email",,
},
表达式属性值:{
“:email”:{S:email},
},
};
数据库查询(参数,(错误,数据)=>{
如果(错误){
拒绝(错误);
}否则{
const processedItems=[…data.Items].sort((a,b)=>a.email
只有在我搜索整个电子邮件mike时,此功能才有效。green@abc.com
问题1-
但是,如果我想搜索mike,并返回电子邮件中包含mike的所有项目,我该如何获取这些内容
问题2
如果我想获取电子邮件中包含mike的所有行,而tenant是加拿大的所有行,我该如何获取这些行呢?我不是NodeJS用户,但希望它能有所帮助 问题1-但是,如果我想搜索mike并返回所有项目 邮件里有迈克,我怎么能得到 键表达式保留为等式约束。如果您希望具有更大的查询灵活性,则需要使用筛选器表达式。请注意,您将无法在分区键上使用筛选器表达式。您可以找到有关的详细信息,但最重要的是: 关键条件表达式 要指定搜索条件,请使用键条件表达式-a 确定要从表或索引中读取的项的字符串 必须将分区键名称和值指定为相等项 条件 您可以选择为排序键提供第二个条件(如果需要) 存在)。排序键条件必须使用以下条件之一 比较运算符:
a = b — true if the attribute a is equal to the value b
a < b — true if a is less than b
a <= b — true if a is less than or equal to b
a > b — true if a is greater than b
a >= b — true if a is greater than or equal to b
a BETWEEN b AND c — true if a is greater than or equal to b, and less than or equal to c.
问题2如果我想得到电子邮件中包含mike和
房客是加拿大,我怎么能拿到
您可以使用筛选器表达式来执行此操作,并使用其中一个可用函数。筛选器表达式为:
如果需要进一步细化查询结果,可以选择
提供筛选器表达式。筛选器表达式确定
查询结果中的项应返回给您
其他结果将被丢弃
在查询完成后,但在
返回结果。因此,查询将消耗相同的金额
读取容量的,而不管是否使用筛选器表达式
现在
查询操作最多可以检索1 MB的数据。此限制为
在计算过滤器表达式之前应用
筛选器表达式不能包含分区键或排序键
属性。您需要在关键条件中指定这些属性
表达式,而不是筛选器表达式。
总结:
- 如果电子邮件是您的分区密钥,则无法对其应用
——您必须直接查询它contains
- 最终,您可以对表进行扫描并对其应用筛选器()但我不会这么做,因为表的容量和响应时间都被消耗掉了。扫描涉及到对表中所有行的操作,所以如果您有数百GB的容量,您可能无法实时获取信息。而实时服务是DynamoDB的目的之一
a = b — true if the attribute a is equal to the value b
a < b — true if a is less than b
a <= b — true if a is less than or equal to b
a > b — true if a is greater than b
a >= b — true if a is greater than or equal to b
a BETWEEN b AND c — true if a is greater than or equal to b, and less than or equal to c.
问题2如果我想得到电子邮件中包含mike和
房客是加拿大,我怎么能拿到
您可以使用筛选器表达式来执行此操作,并使用其中一个可用函数。筛选器表达式为:
如果需要进一步细化查询结果,可以选择
提供筛选器表达式。筛选器表达式确定
查询结果中的项应返回给您
其他结果将被丢弃
在查询完成后,但在
返回结果。因此,查询将消耗相同的金额
读取容量的,而不管是否使用筛选器表达式
现在
查询操作最多可以检索1 MB的数据。此限制为
在计算过滤器表达式之前应用
筛选器表达式不能包含分区键或排序键
属性。您需要在关键条件中指定这些属性
表达式,而不是筛选器表达式。
总结:
- 如果电子邮件是您的分区密钥,则无法对其应用
——您必须直接查询它contains
- 最终你可以对自己进行扫描