当前位置: 首页 > 知识库问答 >
问题:

无法使用Begins_with查询DynamoDB以获取项目列表

伏德义
2023-03-14

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

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

代码:

    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

当我出现“软木塞-1”的情况时,我设法把一件物品拿了回来。我想买每一件以“软木塞”开头的东西。

谢谢你

共有2个答案

谭昕
2023-03-14

以下是我能收集到的信息:

  1. 索引名称行末尾缺少逗号:

常量参数={

TableName: process.env.DYNAMODB_DESKS_TABLE,

IndexName: 'deskName',
ExpressionAttributeValues: {
  ":deskName": { "S": "cork" }
}
麻和雅
2023-03-14

你得到了这个。。。

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数据类型。

 类似资料:
  • 如何使用节点扫描AWS dynamodb中的所有项目。js。我在这里张贴我的代码。 我已经跟踪了链接https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.NodeJs.04.html 过了一会儿我就有时间离开这里了。我也检查了这个链接,如何使用节点从“AWS dynamodb”获取/扫描所有项

  • 假设我有一个DynamoDB表,比如 每个项目都有一个名称,属于一个客户,所以我也有一个索引 假设我有以下数据: 现在,我想查询特定客户的所有项目,并过滤部分名称的结果(本质上是一个搜索操作)。例如,给我所有属于客户42且名称中包含“果汁”的项目(橙汁和苹果汁是预期结果)。 如果我查询,我将得到一个错误,说不支持。我可以理解这个限制,因为意味着必须扫描所有项目(在给定的散列键内),但是,你可以用查

  • 我正在尝试使用查询检索dynamodb表中的所有项。下面是我的代码: 但是,我收到以下错误: 我的代码非常简单,出自boto dynamodb2文档,因此我不确定为什么会出现上述错误。任何见解都将受到赞赏(这是新的,有点迷失)。谢谢 编辑:我有一个散列键和一个范围键。我能够通过特定的哈希键进行查询。例如 但我如何检索所有项目?

  • 我有一个表列,其波浪线值如下所示 我想查询月份“vendorAndPurchaseDate,如“%~08 20'”,以及2020年底的“vendorAndPurchaseDate,如'20'”。我使用Spring数据JPA来查询这些值。我以前从未使用过tilde值的列。请给我指出一个正确的方向或一些例子

  • 本文向大家介绍MongoDB查询以获取特定数量的项目,包括了MongoDB查询以获取特定数量的项目的使用技巧和注意事项,需要的朋友参考一下 要获取特定数量的项目,请在MongoDB中使用$slice运算符。让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是仅获取2个项目的查询- 这将产生以下输出-

  • 本文向大家介绍sharepoint 通过CAML查询获取列表项,包括了sharepoint 通过CAML查询获取列表项的使用技巧和注意事项,需要的朋友参考一下 示例 基本范例 使用对象的set_viewXml方法SP.CamlQuery指定CAML查询以检索项目。 分页CAML查询的结果 您可以利用RowLimitCAML查询中的元素在每个查询中仅检索结果的子集。 使用get_listItemCo