DynamoDB 结果的结构不是我想要的
DynamoDB result is not structured the way I want
我正在执行一个简单的命令来列出我 table 中的所有项目。但是,我取回的数据并不是按照我想要的方式构建的。我想要一个简单的 JSON 结构,但 DynamoDB 正在将结果转换为嵌套对象。
DynamoDB 给我以下回复:
// What I am currently getting
[
{
id: { S: '8' },
lastName: { S: 'Perry' },
firstName: { S: 'Matthew' }
},
{
id: { S: '3' },
firstName: { S: 'Joan' },
lastName: { S: 'Peter' }
}
]
但我想要这个:
// What I want
[
{
id: 8
lastName: 'Perry' ,
firstName: 'Matthew'
},
{
id: 3,
firstName: 'Joan' ,
lastName: 'Peter'
}
]
如何实现后面的结果集。下面是我的代码:
const { ExecuteStatementCommand } = require('@aws-sdk/client-dynamodb')
const { ddbDocClient, memberTableName } = require('./client.js')
const selectAll = async () => {
const params = {
Statement: `SELECT * FROM ${memberTableName}`,
Parameters: [{ S: '3' }]
}
console.log(params)
return await ddbDocClient.send(new ExecuteStatementCommand(params));
}
selectAll()
.then(d => console.log(d.Items))
ddbDocClient 是这样创建的:
const ddbDocClient = DynamoDBDocumentClient.from(ddbClient);
命令导入不正确。要发送和接收本机 JS 类型,请从 @aws-sdk/lib-dynamodb“文档客户端”包中导入 ExecuteStatementCommand
命令。
const { ExecuteStatementCommand } = require('@aws-sdk/lib-dynamodb');
您正在从“常规客户端”包 @aws-sdk/client-dynamodb 导入命令,即接受 returns DynamoDB JSON.
的命令
注意:Parameters: [{ S: '3' }]
行也是错误的,但目前不会造成问题,因为您的语句正在扫描所有记录。如果要在语句中包含 WHERE id=?
短语,请确保将参数更改为 Parameters: ['3']
。您必须将 JS 类型传递给“文档客户端”命令。
您需要使用简单的库 https://www.npmjs.com/package/@aws-sdk/util-dynamodb
然后像这样使用:
const { DynamoDB } = require("@aws-sdk/client-dynamodb");
const { marshall, unmarshall } = require("@aws-sdk/util-dynamodb");
const client = new DynamoDB(clientParams);
const params = {
TableName: "Table",
Key: marshall({
HashKey: "hashKey",
}),
};
const { Item } = await client.getItem(params);
unmarshall(Item);
我正在执行一个简单的命令来列出我 table 中的所有项目。但是,我取回的数据并不是按照我想要的方式构建的。我想要一个简单的 JSON 结构,但 DynamoDB 正在将结果转换为嵌套对象。
DynamoDB 给我以下回复:
// What I am currently getting
[
{
id: { S: '8' },
lastName: { S: 'Perry' },
firstName: { S: 'Matthew' }
},
{
id: { S: '3' },
firstName: { S: 'Joan' },
lastName: { S: 'Peter' }
}
]
但我想要这个:
// What I want
[
{
id: 8
lastName: 'Perry' ,
firstName: 'Matthew'
},
{
id: 3,
firstName: 'Joan' ,
lastName: 'Peter'
}
]
如何实现后面的结果集。下面是我的代码:
const { ExecuteStatementCommand } = require('@aws-sdk/client-dynamodb')
const { ddbDocClient, memberTableName } = require('./client.js')
const selectAll = async () => {
const params = {
Statement: `SELECT * FROM ${memberTableName}`,
Parameters: [{ S: '3' }]
}
console.log(params)
return await ddbDocClient.send(new ExecuteStatementCommand(params));
}
selectAll()
.then(d => console.log(d.Items))
ddbDocClient 是这样创建的:
const ddbDocClient = DynamoDBDocumentClient.from(ddbClient);
命令导入不正确。要发送和接收本机 JS 类型,请从 @aws-sdk/lib-dynamodb“文档客户端”包中导入 ExecuteStatementCommand
命令。
const { ExecuteStatementCommand } = require('@aws-sdk/lib-dynamodb');
您正在从“常规客户端”包 @aws-sdk/client-dynamodb 导入命令,即接受 returns DynamoDB JSON.
的命令注意:Parameters: [{ S: '3' }]
行也是错误的,但目前不会造成问题,因为您的语句正在扫描所有记录。如果要在语句中包含 WHERE id=?
短语,请确保将参数更改为 Parameters: ['3']
。您必须将 JS 类型传递给“文档客户端”命令。
您需要使用简单的库 https://www.npmjs.com/package/@aws-sdk/util-dynamodb
然后像这样使用:
const { DynamoDB } = require("@aws-sdk/client-dynamodb");
const { marshall, unmarshall } = require("@aws-sdk/util-dynamodb");
const client = new DynamoDB(clientParams);
const params = {
TableName: "Table",
Key: marshall({
HashKey: "hashKey",
}),
};
const { Item } = await client.getItem(params);
unmarshall(Item);