Dynamodb查询列表计数

时间:2016-03-02 04:09:49

标签: node.js amazon-dynamodb

我有一个dynamodb表,其中包含以下列,

id,name,events, deadline

events是一个包含多个事件的列表。

我想扫描/查询包含以下项目的所有行,

id,姓名,事件数量。

我尝试了以下方式,但没有收到任何事件数量的值。有人能告诉我哪里错了。

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

1 个答案:

答案 0 :(得分:1)

你无法以这种方式实现自己想要的目标。 “ExpressionAttributeNames”中的条目不作为表达式计算。

“ExpressionAttributeNames”中"#even": "events.length"的定义不会计算表达式event.length并将其分配给变量“#even”。相反,它将“#even”指定为引用名为“events.length”的列或其中“events”是具有“length”属性的对象的表。既然你的桌子都没有,你什么也得不到。

来自DynamoDB documentation

  

在表达式中,点(“。”)被解释为文档路径中的分隔符。但是,DynamoDB还允许您使用点字符作为属性名称的一部分。

要实现您想要的目标,您必须返回“事件”列并计算查询之外的长度,或者定义新的“eventsLength”列,并在您担心返回时自己填充并维护该值“事件“在每个查询中。