You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用AWS.document.client在Amazon DynamoDB中查询嵌套对象属性匹配数据

按嵌套属性parts.createdBy查询DynamoDB数据的实现方案

首先明确前提:DynamoDB 的Query操作仅支持针对表或索引的主键进行查询,无法直接基于非主键的嵌套属性做高效匹配,你可以根据业务场景选择以下两种方案:

方案1:创建全局二级索引(GSI,生产环境推荐)

这是性能最优、成本最低的方案,适合高频查询场景:

  1. 先在你的DynamoDB表中创建GSI,将GSI的分区键设置为parts.createdBy,自行设置索引名称(比如parts_createdBy-index)
  2. 用AWS.document.client执行查询的代码示例如下:
const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient();

const queryParams = {
  TableName: '替换为你的DynamoDB表名',
  IndexName: '替换为你创建的GSI名称',
  KeyConditionExpression: '#createdBy = :creatorId',
  // 嵌套属性带点号,必须用ExpressionAttributeNames做别名映射
  ExpressionAttributeNames: {
    '#createdBy': 'parts.createdBy'
  },
  ExpressionAttributeValues: {
    ':creatorId': '1' // 注意示例中createdBy为字符串类型,需和你表中的数据类型保持一致
  }
};

// 执行查询
const queryResult = await docClient.query(queryParams).promise();
console.log('匹配的所有记录:', queryResult.Items);

方案2:全表扫描(仅适合小表、低频查询场景)

如果你的表数据量极小、该查询使用频率极低,可以用Scan操作实现,不建议生产环境高频使用:Scan会先读取全表所有数据再过滤,数据量大时耗时久、成本高。
代码示例如下:

const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient();

const scanParams = {
  TableName: '替换为你的DynamoDB表名',
  FilterExpression: '#createdBy = :creatorId',
  ExpressionAttributeNames: {
    '#createdBy': 'parts.createdBy'
  },
  ExpressionAttributeValues: {
    ':creatorId': '1'
  }
};

// 执行扫描
const scanResult = await docClient.scan(scanParams).promise();
console.log('匹配的所有记录:', scanResult.Items);

内容的提问来源于stack exchange,提问作者jassu singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:57:02