2016-04-06 20 views
1

DynamoDB'de ConditionExpression yapmaya çalışıyorum, depolanmış bir booleanın gerçek olup olmadığını kontrol etmek için (bu örnekte, kullanıcının zaten doğrulanmış olup olmadığına bakılmaksızın);DynamoDB putItem ConditionExpression "boolean" true

çalışmıyor
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); 
}); 

, bu ne olursa olsun çağrı koşulu denetimi başarısız: gibi javascript DocumentClient SDK (teşekkürler @ Shimon-tolts için) kullanılarak, kod görünüyor.

Hemen hemen ben (pseudocode) gerekenler:

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 

Herhangi bir fikir?

cevap

2

javascript nesneleriyle çalıştığından, DocumentClient kullanmanızı öneririz. sen Daha örneklerini görmek here ve okuyabilir örneğin ::

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

için ExpressionAttributeNames ve ExpressionAttributeValues ​​belirtmek zorunda şart ifadesini yapmak için daha here

Sonunda hakkını endam sonra çalışmaya bu var
+0

İyi bir çağrı, tüm veritabanı çağrılarımı DocumentClient yerine taşıdım, ancak yine de ConditionExpression'u anlayamıyorum. Hemen hemen ben (pseudocode) ne gerek eposta zaten var EĞER VE doğrulanmadı SONRA eposta zaten var EĞER PUT izin yanlış VE doğrulanmış SONRA SONRA izin eposta yok IF PUT izin vermez doğrudur eşittir PUT (Ana postayı güncelleyeceğim) – csilk

1

ExpressionAttributeValues:

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

Ben benzer bir sorun var ve bu benim için, bir yaşında olmasına rağmen o y benziyor çünkü bu konuda tökezleyerek am Bunun yerine

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

:

ExpressionAttributeValues: { 
    ":bool": false 
} 

bunu böyle denediniz bizim boolean bir dize olmamalı?