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

DynamoDB查询中,如何在未知属性值时比较同项目内的两个属性?

DynamoDB同项目内字段值对比筛选问题解决

你之前的错误在于完全用错了ExpressionAttributeNames的作用——它是用来替换属性名称的占位符,不是绑定字段值的。你把#toDo映射成info.toDo的实际值,这不符合它的设计逻辑,所以查询不会返回任何数据。

要筛选info.toDo等于info.done的项目,DynamoDB支持直接在FilterExpression里对比同一个项目的两个属性值,不需要用到ExpressionAttributeValues(它是用来传递外部对比值的,不是表内字段)。

正确实现方式

方式1:直接使用属性路径

如果属性名称没有和DynamoDB关键字冲突,直接在FilterExpression里写完整属性路径即可:

const params = {
  TableName: '你的目标表名',
  FilterExpression: 'info.toDo = info.done'
};

方式2:用ExpressionAttributeNames替换属性名(适用于属性名含特殊字符或关键字的情况)

如果info、toDo或done是DynamoDB保留关键字,或者属性名有特殊字符,可以用占位符替换属性名称:

const params = {
  TableName: '你的目标表名',
  ExpressionAttributeNames: {
    '#info': 'info',
    '#toDo': 'toDo',
    '#done': 'done'
  },
  FilterExpression: '#info.#toDo = #info.#done'
};

注意事项

  • FilterExpression是在查询/扫描拿到数据后再做过滤,不是存储层级别的过滤,所以如果表数据量很大,扫描的读写成本会比较高,需要评估场景是否适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 01:24:14