Malini
Malini

Reputation: 11

Dynamodb - Condition Expression with ExpressionAttributeNames not working

Am trying to do a conditional update and since the field name is a reserved keyword, am using ExpressionAttributeNames to pass in the column name for the condition. The update part isn't working if i use the ExpressionAttributeNames. Any thoughts?

Update: {
                    Key: {
                        "pk": "sb#prd#" + productId,
                        "sk": productId.toString()
                    },
                    TableName: 'test',
                    ConditionExpression: '#minQty >= :minQty',
                    UpdateExpression: "set sold_count = :sold_count",
                    ExpressionAttributeNames: {
                        "#minQty" : "variant[0].items[0].availableQty"
                    },
                    ExpressionAttributeValues: {
                   
                        ":sold_count" : 1,
                        ":minQty" : 1
                    },
                }

Upvotes: 0

Views: 716

Answers (1)

Nadav Har'El
Nadav Har'El

Reputation: 13801

The aliases defined in ExpressionAttributeNames can only be a single attribute name - they cannot be full paths like variant[0].items[0].availableQty.

You can do something like:

ConditionExpression: '#v[0].#i[0].#a >= :minQty',
ExpressionAttributeNames: {
    "#v" : "variant",
    "#i" : "items",
    "#a" : "availableQty"
},

Upvotes: 3

Related Questions