繁体   English   中英

AWS dynamodb ScanInput ExpressionAttributeValue 未按预期工作

[英]AWS dynamodb ScanInput ExpressionAttributeValue not working as expected

我写了一个扫描查询来获取像这样的唯一启用的数据

    const FilterExpression = 'enabled = :enabled';
    const ExpressionAttributeValues = { ':enabled': { 'BOOL': true } };
    const scanParameters: ScanInput = {
      TableName,
      ExclusiveStartKey: cursor ?? undefined,
      Limit: Number(filter.limit) ?? undefined,
      FilterExpression,
      ExpressionAttributeValues,
    };

但它不会返回任何值。 当我将 ExpressionAttributeValue 更改为

const ExpressionAttributeValues = { ':enabled': true };

它返回值但不满足 ScanInput 的类型。 抛出这样的错误在此处输入图像描述

“类型 '{ ':enabled': boolean; }' 不可分配给类型 'ExpressionAttributeValueMap'。属性 '':enabled'' 与索引签名不兼容。”我知道的一种解决方案是创建一个新类型并分配值根据但为什么在扫描数据时类型 ScanInput 格式数据不起作用?

您没有提供足够的代码来完全理解您的问题。 我在这里的假设是您正在混淆客户端,这意味着您正在使用 DynamoDB JSON { 'BOOL': true }为低级客户端定义参数,但实际上您使用的是使用本机 JSON 的文档客户端。

/*
  Convert the key JavaScript object you are retrieving to the
  required Amazon DynamoDB record. The format of values specifies
  the datatype. The following list demonstrates different
  datatype formatting requirements:
  String: "String",
  NumAttribute: 1,
  BoolAttribute: true,
  ListAttribute: [1, "two", false],
  MapAttribute: { foo: "bar" },
  NullAttribute: null
   */

请确保您对所使用的客户端使用正确的语法。

尝试:

const params = {
  TableName: TableName,
  ExpressionAttributeNames: { "#enablee": "enabled"},
  FilterExpression: "#enabled = :enabled",
  ExpressionAttributeValues: {
    ":enabled": true
  },
};


const data = await ddbDocClient.send(new ScanCommand(params));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM