DynamoDB putItem ConditionExpression" boolean"真正

时间:2016-04-06 05:08:02

标签: javascript amazon-web-services amazon-dynamodb

我正在尝试在DynamoDB中执行一个ConditionExpression,以检查存储的布尔值是否为真(在此示例中,用户是否已经过验证不运行put),我正在使用javascript DocumentClient SDK(感谢@ shimon-tolts),代码如下:

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

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

我建议使用DocumentClient,因为它适用于javascript对象。 要执行条件表达式,您必须指定ExpressionAttributeNames和ExpressionAttributeValues,例如::

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

您可以查看更多示例here并阅读更多here

答案 1 :(得分:2)

在弄清楚ExpressionAttributeValues

之后,我终于开始工作了
dclient.scan(TableName='bix-workflow-images', 
FilterExpression="wgs = :t or attribute_not_exists(wgs)", 
ExpressionAttributeValues={':t':{'BOOL':True}})

答案 2 :(得分:0)

我对此感到磕磕绊绊因为我有类似的问题,虽然这已经有一年了,但对我来说,看起来你的布尔不应该是一个字符串:

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

相反:

ExpressionAttributeValues: {
    ":bool": false
}

你有没有尝试过?