2016-11-07 39 views
1

我有一個用GUI創建的用戶表,並給出了電子郵件的分區鍵,它是一個字符串。然後,我用aws lambda做了一個putItem,它有:AWS DynamoDB查詢不在BOOL值上篩選

email (string) [email protected] 
deleted (BOOL) false 

這工作正常。然後,我嘗試使用以下PARAMS和查詢拉姆達進行查詢:

var params = 
{ 
    TableName : 'Users', 
    KeyConditionExpression : 'email = :email', 
    FilterExpression : 'deleted = :deleted', 
    ExpressionAttributeValues : 
    { 
     ':email' : email, 
     ':deleted': 
     { 
      BOOL: false 
     } 
    } 
}; 

docClient.query(params, function(err, data) 
{ 
    if (err) return fn(err); 
    else 
    { 
     console.log("GetItem succeeded:", JSON.stringify(data, null, 2)); 
    } 
}); 

這總是返回0項目時,我搜索電子郵件= [email protected]並留下被刪除的假。如果我刪除刪除的過濾器表達式,我得到一個項目返回所以爲什麼不BOOL = false工作,或者我應該使用別的東西?

+0

可以顯示DynamoDB示例數據嗎?我想知道是否刪除了BOOL數據類型的字段。 – notionquest

+0

是的,我願意。你如何檢查dynamodb gui這些項目的數據類型是什麼? – cdub

+0

gui中的過濾器似乎只允許查詢字符串,二進制或數字 – cdub

回答

4

以下是過濾BOOL數據的代碼。由於DynamoDB將其解釋爲MAP數據類型內的BOOL值,因此不需要如下所示進行編碼。

{ BOOL: false  } 

更改爲: -

':deleted' : false 

代碼: -

var table = "users"; 

var params = { 
    TableName : table, 
    KeyConditionExpression : 'email = :email', 
    FilterExpression: 'deleted = :deleted', 
    ExpressionAttributeValues : { 
     ':email' : '[email protected]', 
     ':deleted' : false 
    } 
}; 

docClient.query(params, function(err, data) { 
    if (err) { 
     console.error("Unable to read item. Error JSON:", JSON.stringify(err, 
       null, 2)); 
    } else { 
     console.log("GetItem succeeded:", JSON.stringify(data, null, 2)); 
    } 
}); 

具有BOOL數據我DynamoDB項: -

enter image description here