DynamoDB Scan在Node.js上获取对象的属性

时间:2019-12-15 17:23:25

标签: amazon-dynamodb dynamodb-queries

我目前正在使用以下命令获取数据库中的所有条目:

<div class="time-box" *ngIf="p.value.playerTimer > 0">
    {{ p.value.playerTimer * 1000 | date:'mm:ss' }}
</div>

问题是我不需要const params = { TableName: process.env.AWS_DYNAMODB_TABLE, Select: "SPECIFIC_ATTRIBUTES", AttributesToGet: ["SessionValue"] }; dynamoClient.scan(params, function(err, data) { console.log("GetItem succeeded:", JSON.stringify(data, null, 2)); }); 中的所有东西,这是一个很大的对象。相反,我想做类似的事情:

SessionValue

但是,运行上面的命令不会返回任何内容。在nodejs上使用DynamoDb可以做到吗?

1 个答案:

答案 0 :(得分:1)

您可以使用Projection Expression进行此操作。

var AWS = require('aws-sdk');
var dynamoClient = new AWS.DynamoDB.DocumentClient();

const params = {        
    TableName: process.env.AWS_DYNAMODB_TABLE,
    ExpressionAttributeNames: {
        "#S": "SessionValue",
        "#w": "wallet",
        "#k": "keys",
    },
    Select: "SPECIFIC_ATTRIBUTES",
    ProjectionExpression: "#S.#w.#k",                                                                                                                                        
};

dynamoClient.scan(params, function(err, data) {
    if (err) {
        console.log(err, err.stack);
    } else {
        console.log("GetItem succeeded:", JSON.stringify(data, null, 2));
    }
});

可能很重要的一点是要注意,响应包括完整的对象包络,因此您必须在成功回调中将其拆开(如果您希望希望Scan调用仅返回嵌套的项)。下面是来自模拟表的示例响应。

GetItem succeeded: {
  "Items": [
    {
      "SessionValue": {
        "wallet": {
          "keys": [
            "brad001",
            "brad002"
          ]
        }
      }
    },
    {
      "SessionValue": {
        "wallet": {
          "keys": [
            "foo001",
            "foo002"
          ]
        }
      }
    }
  ],
  "Count": 2,
  "ScannedCount": 2
}