Dynamodb querying for list count

I have a dynamodb table which has following columns,

id,name,events, deadline

events is a list which contain number of events.

I want to scan/query for all the rows with following items as the result,

id, name, number of events.

I tried following way but didn't receive any value for number of events. Can someone show me where am I wrong.

var params = {
    TableName: 'table_name',
    ExpressionAttributeNames: {"#name": "name",
                               "#even": "events.length"
                              },
    ProjectionExpression: 'id, #name, #even'
}

Upvotes: 0

Views: 3135

Answers (1)

Sernst
Sernst

Reputation: 524

You cannot achieve what you want in this way. The entries in "ExpressionAttributeNames" are not evaluated as expressions.

The definition of "#even": "events.length" in "ExpressionAttributeNames" does not evaluate the expression event.length and assign it to the variable "#even". Instead it specifies "#even" as referring to a column named "events.length" or a table where "events" is an object that has a "length" attribute. Since your table has neither, you get nothing back.

From the DynamoDB documentation:

In an expression, a dot (".") is interpreted as a separator character in a document path. However, DynamoDB also allows you to use a dot character as part of an attribute name.

To achieve what you want, you will have to return the "events" column and calculate the length outside of the query, or define a new "eventsLength" column and populate and maintain that value yourself if you are concerned about returning "events" in each query.

Upvotes: 1

Related Questions