2017-01-23 41 views
0

我試圖運行在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屬性。

任何幫助非常感謝,謝謝!用於匹配列表中的元件檢查: -

回答

1

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

您使用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))' 
相關問題