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

Node.js操作DynamoDB如何使用NOT_CONTAINS等过滤条件完成查询

DynamoDB Node.js 查询过滤条件写法示例

需求对应正确实现(排除taggedUsers列表包含指定userId的记录)

你原有代码的问题是NOT_CONTAINS语法错误,DynamoDB中NOT_CONTAINS属于函数类运算符,需要将属性名和比较值作为参数传入括号内,正确写法如下:

const userId = "待排除的用户ID"; // 替换为业务实际传值
const key_value = req.query.lastEvaluatedKey || null; // 分页起始参数

var params = {
  TableName: config.aws_table_name,
  IndexName: "active",
  ExclusiveStartKey: key_value,
  ExpressionAttributeNames: {
    "#timestamp": "timestamp",
    "#tu": "taggedUsers",
  },
  KeyConditionExpression: "active = :ac and #timestamp BETWEEN :from AND :to",
  // 修正后的NOT_CONTAINS写法
  FilterExpression: "NOT_CONTAINS(#tu, :excludeUserId)",
  ProjectionExpression: "title, description",
  ExpressionAttributeValues: {
    ":ac": "true",
    ":from": 1632919324385,
    ":to": Date.now(),
    ":excludeUserId": userId,
  },
  Limit: Number(req.query.limit) || 10,
};

常见条件运算符写法示例

  • NOT_CONTAINS 补充示例(字符串场景)

    过滤title字段不包含"测试"字样的记录:

    ExpressionAttributeNames: {
      "#title": "title"
    },
    FilterExpression: "NOT_CONTAINS(#title, :keyword)",
    ExpressionAttributeValues: {
      ":keyword": "测试"
    }
    
  • LE(小于等于)示例

    过滤likeCount点赞数小于等于10的记录,支持两种写法:

    // 写法1:运算符写法
    ExpressionAttributeNames: { "#likeCount": "likeCount" },
    FilterExpression: "#likeCount <= :maxLike",
    ExpressionAttributeValues: { ":maxLike": 10 }
    
    // 写法2:函数写法
    FilterExpression: "LE(#likeCount, :maxLike)"
    
  • NE(不等于)示例

    过滤status状态不等于deleted已删除的记录,支持两种写法:

    // 写法1:运算符写法
    ExpressionAttributeNames: { "#status": "status" },
    FilterExpression: "#status <> :excludeStatus",
    ExpressionAttributeValues: { ":excludeStatus": "deleted" }
    
    // 写法2:函数写法
    FilterExpression: "NE(#status, :excludeStatus)"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:27:04