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
相关产品推荐
相关产品推荐

