首页 > 解决方案 > DynamoDB 使用 NodeJS 扫描嵌套属性值

问题描述

我有一个内部有嵌套值的 DynamoDB。条目如下所示: 示例条目

现在我想扫描数据库中的所有条目以查找具有特定 episodeGuid 的所有条目。

我尝试了这段代码(和一些变体),但总是得到 0 个结果。

    var params = {
        TableName: "myTableName",
        FilterExpression: "#episodeGuid = :myEpisode",
        ExpressionAttributeNames: {
            '#episodeGuid': 'attributes.playbackInfo.episodeGuid',
        },
        // ExpressionAttributeValues: { ":myEpisode": { "S": "podlove-2018-12-06t13:07:10+00:00-f8a9b2963f313e5" } }
        ExpressionAttributeValues: { ":myEpisode": "podlove-2018-12-06t13:07:10+00:00-f8a9b2963f313e5" }
    };

    oDynamoDBClient.scan(params, async function (err, data) {
        console.log('read return');
        if (err) console.log(err, err.stack); // an error occurred
        else {
            console.log(data);
        }
    });

有人可以给我一个提示,我怎样才能找到我的条目?

标签: amazon-web-servicesamazon-dynamodb

解决方案


过滤器正在寻找一个名为attributes.playbackInfo.episodeGuid而不是嵌套属性的属性。

要查找嵌套属性,表达式需要包含 to .

FilterExpression: "#attributes.#playbackInfo.#episodeGuid = :myEpisode",
ExpressionAttributeNames: {
  '#attributes': 'attributes',
  '#playbackInfo': 'playbackInfo',
  '#episodeGuid': 'episodeGuid',
},

推荐阅读