DyanmoDB 验证异常批量写入

问题描述 投票:0回答:1

我正在尝试将项目批量写入我的

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
但问题持续存在。

amazon-dynamodb dynamodb-queries
1个回答
0
投票

您使用的文档客户端采用本机 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/

© www.soinside.com 2019 - 2024. All rights reserved.