DynamoDB FilterExpression与NOT IN
问题描述:
我试图运行在DynamoDB查询过滤器表达式(在Node.js的环境),对其中一个属性不被那些属性的列表。我这样做:DynamoDB FilterExpression与NOT IN
documentClient.query({
TableName: 'event',
IndexName: 'OrganisationTimestamp',
KeyConditionExpression: '#ts BETWEEN :from AND :to',
ExpressionAttributeNames: {
'#ts': 'Timestamp'
},
ExpressionAttributeValues: {
':to': to,
':from': from,
':ignoredUserIds': "1, 2, 3"
},
FilterExpression: 'not (userId in (:ignoredUserIds))'
})
但是我并没有在这里任何运气,而且越来越项背与该范围内的用户id属性。
任何帮助非常感谢,谢谢!用于匹配列表中的元件检查: -
答
IN
可以如果userId
属性定义为DynamoDB LIST
数据类型
IN仅使用。
AttributeValueList可以 包含一个或多个类型为String,Number或 Binary的AttributeValue元素。将这些属性与 某个项目的现有属性进行比较。如果输入中的任何元素都等于项目属性, 表达式评估为真。
解决方案:
更改FilterExpression和如下面提到ExpressionAttributeValues。它应该工作。
ExpressionAttributeValues: {
':to': to,
':from': from,
':userid1': "1",
':userid2': "2",
':userid3': "3"
},
FilterExpression: 'userId <> :userid1 and userId <> :userid2 and userId <> :userid3'
答
您使用ignoredUserIds
,如果它是一个宏... 你应该做的:
ExpressionAttributeValues: {
':to': to,
':from': from,
':id1': 1,
':id2': 2,
':id3': 3,
},
FilterExpression: 'not (userId in (:id1, :id2, id3))'
,如果你是唯一的映射号码,你应该能够做到:
FilterExpression: 'not (userId in (1, 2, 3))'