【发布时间】:2021-01-11 09:01:17
【问题描述】:
我正在尝试使用 aws DynamoDB,并阅读了一些关于在表上创建、读取和更新项目的指南。但是由于某种原因,我在使用 documentClient 和 DynamoDB 时得到了不同的键值;即键值略有不同。
在我的代码中:
const dynamodb = new AWS.DynamoDB();
let docClient = new AWS.DynamoDB.DocumentClient();
async function returnServers(){
await dynamodb.scan({TableName: 'pixelbot_servers'}, function(err, data) {
if (err) {
console.error("Unable to read item. Error JSON:", JSON.stringify(err, null, 2));
} else {
console.log("dynamodb scan succeeded:", JSON.stringify(data, null, 2));
}
});
await docClient.scan({TableName: 'pixelbot_servers'}, function(err, data) {
if (err) {
console.error("Unable to read item. Error JSON:", JSON.stringify(err, null, 2));
} else {
console.log("docClient scan succeeded:", JSON.stringify(data, null, 2));
}
});
但是,当我查看控制台时,我会看到具有不同键值的项目。键相同,但值相差几位数。
docClient scan succeeded: {
"Items": [
{
"server_id": 558952579627876350,
"getrole_post_id": 797525306164510700
和
dynamodb scan succeeded: {
"Items": [
{
"server_id": {
"N": "558952579627876353"
},
"getrole_post_id": {
"N": "797525306164510740"
我只是想知道为什么我只使用一个表时会得到不同的值。倾向于正确的值是来自 dynamodb 而不是我看到大多数人使用的 docClient 的值。
编辑:我已将数据类型更改为表上的字符串,因此我将从 docclient 和 dynamodb 获得一致的结果,但仍然不确定为什么使用 datatype: number 时值不同。可能是从 int 到 bigint 或类似的错误转换。不确定。
【问题讨论】:
-
scan 不保证顺序,可能每次获取记录的顺序都不一样,我实在想不出每个客户端给出不同结果的任何原因。跨度>
-
我关心的不是顺序,而是结果。我什至不知道 docClients 结果来自哪里,因为我只有一张表,其结果与 dynamodb 返回的结果相同。
-
我看不出你在哪里说键是相同的 - 哪个字段是结果中的键?因为 server_id 和 getrole_post_id 都有不同的值。
-
您可以在此处查看数据类型限制:docs.aws.amazon.com/amazondynamodb/latest/developerguide/…
-
这张表有多少项?在一次扫描中返回它们的数量是否足够少?如果没有,则需要根据需要进行分页,汇总结果,最后对结果进行排序比较。
标签: node.js amazon-web-services amazon-dynamodb