我正在尝试将项目批量写入我的
users
表,但我收到了 ValidationException。我无法确定为什么The provided key element does not match the schema
。我创建了一个新表,分区键是id
。
批量写入功能
const batchWriteUserData = (data) => {
const input = {
RequestItems: {
"users": data.map((item) => ({
PutRequest: {
Item: {
id: { S: item.id },
name: { S: item.name },
username: { S: item.username },
email: { S: item.email },
password: { S: item.password },
blogs: {
L: item.blogs.map((blog) => ({
M: {
id: { S: blog.id.toString() },
title: { S: blog.title },
content: { S: blog.content },
},
})),
},
},
},
})),
},
}
console.log(JSON.stringify(input, null, 2))
dynamoDB.batchWrite(input, (err, data) => {
if (err) console.error('Error:', err);
else return 'Sucess';
});
}
创建数据的函数
const generateBlogData = () => {
const paragraphAmount = Math.floor((Math.random() * 5) + 1);
const titleAmount = Math.floor((Math.random() * 10) + 1);
const blogCount = Math.floor(Math.random() * 9 + 1);
const userBlogs = [];
for (let i = 0; i < blogCount; i++) {
const blogTitle = lorem.generateWords(titleAmount);
const blogContent = lorem.generateParagraphs(paragraphAmount);
const blogData = {
id: i + 1,
title: blogTitle,
content: blogContent,
};
userBlogs.push(blogData);
};
return userBlogs;
};
const generateUserData = () => {
let maxUsers = 100;
let count = 0;
let userData = []
while (maxUsers > 0) {
const prefix = lorem.generateWords(1);
const suffix = lorem.generateWords(1);
const loremPassword = lorem.generateWords(1).concat(Math.floor(Math.random() * 900) + 100);
const data = {
id: generateUniqueId(),
name: generateUniqueName(),
username: generateUniqueUsername(),
email: `${prefix}@${suffix}.com`,
password: loremPassword
};
data['blogs'] = generateBlogData();
if (count < 25) {
userData.push(data);
}
else if (count === 25) {
batchWriteUserData(userData);
}
count++;
maxUsers--;
}
};
有人可以确定为什么会发生这种情况吗?我很感激任何反馈/观点。
我尝试只写入用户数据,甚至只写入 id 来确定问题是否是博客数据,我还尝试存储不带
blog.id
的 .toString()
并将类型设置为 N
但问题持续存在。
您使用的文档客户端采用本机 JSON,而不是您根据请求使用的 DDB JSON。
const input = {
RequestItems: {
"users": data.map((item) => ({
PutRequest: {
Item: {
id: item.id ,
name: item.name ,
username: item.username ,
email: item.email ,
password: item.password ,
blogs:
item.blogs.map((blog) => ({
id: blog.id.toString() ,
title: blog.title ,
content: blog.content ,
})),
},
},
})),
},
}
在此处了解更多信息:https://aws.amazon.com/blogs/database/exploring-amazon-dynamodb-sdk-clients/