Amazon web services DynamoDB查询/扫描仅返回项目的子集

Amazon web services DynamoDB查询/扫描仅返回项目的子集,amazon-web-services,amazon-dynamodb,dynamodb-queries,Amazon Web Services,Amazon Dynamodb,Dynamodb Queries,我注意到DynamoDB查询/扫描只返回包含文档子集的文档,只返回它显示的关键列 这意味着我需要进行单独的批处理,以获取这些键引用的实际文档 我没有使用投影表达式,根据文档,这意味着应该返回整个项目 如何获取查询以返回整个文档,从而不必执行单独的批处理获取 下面是显示这一点的一段代码示例。它打印出找到的文档,但它们只包含主键、次键和排序键 t1 = db.Table(tname) q = { 'IndexName': 'mysGSI', 'KeyConditionExpres

我注意到DynamoDB查询/扫描只返回包含文档子集的文档,只返回它显示的关键列

这意味着我需要进行单独的批处理,以获取这些键引用的实际文档

我没有使用投影表达式,根据文档,这意味着应该返回整个项目

如何获取查询以返回整个文档,从而不必执行单独的批处理获取

下面是显示这一点的一段代码示例。它打印出找到的文档,但它们只包含主键、次键和排序键

t1 = db.Table(tname)

q = { 
    'IndexName': 'mysGSI',
    'KeyConditionExpression': "secKey= :val1 AND " \
                              "begins_with(sortKey,:status)",
    'ExpressionAttributeValues': {
        ":val1": 'XXX',
        ":status": 'active-',
    }
}
res = t1.query(**q)

for doc in res['Items']:
    print(json.dumps(doc))

在参数的文档中讨论了这种情况。你必须读很多书才能找到这个,这并不理想

如果查询或扫描全局辅助索引,则只能请求 投影到索引中的属性。全球二级指数 查询无法从父表获取属性

基本上:

  • 如果查询父表,则默认情况下获得所有属性

  • 如果查询LSI,则默认情况下会获取所有属性-如果所有属性都投影到索引中(因此不需要额外成本),则会从LSI中的投影中检索属性,否则会从基表中检索属性(这将需要更多读取)

  • 如果查询或扫描GSI,则只能请求投影到索引中的属性。GSI查询无法从父表获取属性


不,这不对。对DynamoDB表的简单awscli查询将显示请求项的所有属性。我们能看到一些代码吗?@jarmod我添加了一些用于测试的代码。其他程序也显示了同样的行为。你只为GSI的投影类型设置了键?@jarmod我相信是的,但这并不会阻止batch\u get\u项目返回整个文档。BatchGetItem不使用索引,因此它不限于任何给定索引的投影属性。