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))'