【问题标题】:Dynamodb querying for list countDynamodb 查询列表计数
【发布时间】:2016-03-03 02:15:58
【问题描述】:

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

id,name,events, deadline

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

我想扫描/查询结果为以下项目的所有行,

id、名称、事件数。

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

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

【问题讨论】:

    标签: node.js amazon-dynamodb


    【解决方案1】:

    你无法以这种方式实现你想要的。 “ExpressionAttributeNames”中的条目不会被评估为表达式。

    “ExpressionAttributeNames”中"#even": "events.length" 的定义不计算表达式event.length 并将其分配给变量“#even”。相反,它将“#even”指定为引用名为“events.length”的列或其中“events”是具有“length”属性的对象的表。由于您的桌子两者都没有,您将一无所获。

    来自DynamoDB documentation

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

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

    【讨论】:

    • 谢谢。我按照你建议的方式做了。但想知道大型数据集是否会出现性能问题。
    • 是的,我认为您希望避免返回包含大型事件列表的大型数据集的整个列表。不幸的是,没有简单的替代解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多