Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AWS Dynamodb查询-使用条件从表中获取项_Javascript_Node.js_Database_Amazon Dynamodb_Aws Sdk - Fatal编程技术网

Javascript AWS Dynamodb查询-使用条件从表中获取项

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

有一个带字段的Dynamo表:

  • 电子邮件(主要)
  • 房客
  • 其他东西
我想获取电子邮件中包含“mike”的所有项目

在我的nodejs服务器中,我有以下代码

 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的目的之一

我不是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
    ——您必须直接查询它
  • 最终你可以对自己进行扫描