node.js - 无法使用 Begins_with 查询 DynamoDB 的项目列表

标签 node.js amazon-web-services amazon-dynamodb

我已经尝试从 DynamoDB 查询数据 2 天了。让我发疯。

我的办公室里有一张 table 。假设有两个办事处:科克和都柏林。我有一个名为“deskName”的列,其名称为“cork1”、“cork2”、“dub1”、“dub2”。我希望能够在表中查询包含“cork”或“dub”的项目,因为它们位于同一个表中,但我不想扫描整个表。

Table details

Table Columns

代码:

    const params = {
    TableName: process.env.DYNAMODB_DESKS_TABLE,
    //KeyConditionExpression: '#deskName = :deskName',
    KeyConditionExpression: "begins_with(#deskName, :deskName)",
    ExpressionAttributeNames: {
      "#deskName": "deskName"
    },
    ExpressionAttributeValues: {
      ":deskName": "cork"
    }
  }

  dynamodb.query(params, (error, result) => {
    if (error) {
      console.error(error);
      callback(null, {
        statusCode: error.statusCode || 501,
        headers: {'Content-Type': 'text/plain'},
        body: 'Couldn\'t get desks'
      });
      return;
    }

    const response = {
      statusCode: 200,
      body: JSON.stringify(result.Item)
    };

    callback(null, response);

  });

YAML:

HotDeskDesksDBTable:
  Type: 'AWS::DynamoDB::Table'
  DeletionPolicy: Retain
  Properties:
    AttributeDefinitions:
      -
        AttributeName: deskName
        AttributeType: S
    KeySchema:
      -
        AttributeName: deskName
        KeyType: HASH
    ProvisionedThroughput:
      ReadCapacityUnits: 1
      WriteCapacityUnits: 1
    TableName: ${self:provider.environment.DYNAMODB_DESKS_TABLE}

错误:

ValidationException: Query key condition not supported

当我遇到条件=“cork-1”时,我设法拿回了一件元素。我想要获得以“软木塞”开头的所有元素。

谢谢

最佳答案

你明白了...

Syntax error in module 'api/desks/get': SyntaxError
    KeyConditionExpression: "#deskName = :deskName",
    ^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: Unexpected identifier

因为这个...

const params = {
  TableName: process.env.DYNAMODB_DESKS_TABLE,
  IndexName: 'deskName'
  KeyConditionExpression: "#deskName = :deskName",
  ExpressionAttributeNames:{
    "#deskName": "deskName"
  },
  ExpressionAttributeValues: {
    ":deskName": "cork"
  }
}

JavaScript 对象在每个属性后需要一个逗号。您在 IndexName: 'deskName' 之后缺少一个。

我建议使用DocumentClient因为它可以轻松地将 Javascript 数据类型映射到 DynamoDB 数据类型。

关于node.js - 无法使用 Begins_with 查询 DynamoDB 的项目列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46543319/

相关文章:

javascript - 如何让nodejs在继续之前等待mongodb连接(以阻塞方式调用async)

node.js - discord js 从用户消息中获取参数并在变量中使用它们显示为未定义

node.js - Babel 只是将 .js 文件处理到 dist 文件夹中

amazon-web-services - Azure 中有类似 AWS Direct Connect 的东西吗?

amazon-dynamodb - Number 类型的 DynamoDB 属性中可以存储多少位整数数据?

amazon-dynamodb - 如何在 dynamoDB 上运行 DeleteItemRequest?

javascript - 下面的代码将向控制台输出什么?原因是什么?

amazon-web-services - AWS Lambda 函数如何响应多记录事件负载,即 Lambda 代码是每批运行一次还是多次?

amazon-web-services - 使用 AWS 开发工具包签署 API Gateway 请求

amazon-web-services - "aws dynamodb list-tables"未显示存在的表格