我有一个dynamodb表,其中包含以下列,
id,name,events, deadline
events是一个包含多个事件的列表。
我想扫描/查询包含以下项目的所有行,
id,姓名,事件数量。
我尝试了以下方式,但没有收到任何事件数量的值。有人能告诉我哪里错了。
var params = {
TableName: 'table_name',
ExpressionAttributeNames: {"#name": "name",
"#even": "events.length"
},
ProjectionExpression: 'id, #name, #even'
}
答案 0 :(得分:1)
你无法以这种方式实现自己想要的目标。 “ExpressionAttributeNames”中的条目不作为表达式计算。
“ExpressionAttributeNames”中"#even": "events.length"
的定义不会计算表达式event.length
并将其分配给变量“#even”。相反,它将“#even”指定为引用名为“events.length”的列或其中“events”是具有“length”属性的对象的表。既然你的桌子都没有,你什么也得不到。
在表达式中,点(“。”)被解释为文档路径中的分隔符。但是,DynamoDB还允许您使用点字符作为属性名称的一部分。
要实现您想要的目标,您必须返回“事件”列并计算查询之外的长度,或者定义新的“eventsLength”列,并在您担心返回时自己填充并维护该值“事件“在每个查询中。