2016-04-06 11 views
1

DynamoDB putでConditionExpressionを実行しようとしていますが、ストアされたブール値がtrueであるかどうかをチェックしています(この例では、ユーザーが既にputを実行していないかどうかを確認します)。 JavaScriptのDocumentClient SDK(感謝に@シモン・tolts)を使用して、コードは次のようになります。DynamoDB putItem ConditionExpression "boolean" true

動作しません
var query = { 
    TableName: tableName, 
    Item: { 
     email: email, 
     verified: false, 
     verifyToken: token 
    }, 
    ConditionExpression: 'attribute_exists(email) AND verified = :bool', 
    ExpressionAttributeValues: { 
     ":bool":"false" 
    } 
}; 

dynamodb.put(query, function(err, data){ 
    if (err) return fn(err) 
    fn(null, data); 
}); 

、それがどんなコール状態のチェックに失敗しません。

ほとんど私が(擬似コードで)必要なもの:

IF email already exists AND verified equals false 
    THEN allow PUT 
IF email already exists AND verified equals true 
    THEN don't allow PUT 
IF email does not exist 
    THEN allow PUT 

任意のアイデア?

答えて

2

DocumentClientを使用することをお勧めします。これはjavascriptオブジェクトで動作するためです。あなたが例えばExpressionAttributeNamesとExpressionAttributeValuesを指定する必要があり、条件式を行うに ::

ConditionExpression: "#yr <> :yyyy and title <> :t", 
ExpressionAttributeNames:{"#yr":"year"}, 
ExpressionAttributeValues:{ 
    ":yyyy":year, 
    ":t":title 
} 

あなたはより多くの例を見るherehere

+0

いいえ、DocumentClientにすべてのデータベース呼び出しを移動しましたが、依然としてConditionExpressionを把握できません。 はかなり私は(擬似コードで)必要なもの メールが既に存在する場合、検証はTHENメールが既に存在する場合 をPUTできるよう 偽、検証が THEN THENできるように電子メールが 存在しない場合 をPUT許可していない真等しい等しくPUT (私はメインポストを更新します) – csilk

1

詳細を読むことができ、私は最終的に、これは権利を考え出す後に動作するようになりましたExpressionAttributeValues

dclient.scan(TableName='bix-workflow-images', 
FilterExpression="wgs = :t or attribute_not_exists(wgs)", 
ExpressionAttributeValues={':t':{'BOOL':True}}) 
0

私は同様の問題があり、これが私のために、歳ですが、それはyのように見えるので、私はこれについてつまずきいます代わりに

ExpressionAttributeValues: { 
    ":bool": "false" 
} 

ExpressionAttributeValues: { 
    ":bool": false 
} 

は、あなたがそれそのようにしようとしたことがあり、当社のブール値は文字列ではないでしょうか?

関連する問題