2016-11-07 8 views
1

GUIで作成され、電子メールのpartionキーが与えられ、それが文字列であるusersテーブルがあります。私はその後aws lambdaを使ってputItemを実行しました:BOOL値でAWS DynamoDBクエリがフィルタリングされない

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)); 
    } 
}); 

私は、電子メール= [email protected]を検索し、削除したとして虚偽を離れるときにこれが常に0のアイテムを返します。私が削除されたフィルタ式を削除した場合、私はアイテムを返すので、なぜ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

関連する問題