DynamoDB&;NodeJS:从JSON数组搜索表

DynamoDB&;NodeJS:从JSON数组搜索表,json,node.js,amazon-dynamodb,Json,Node.js,Amazon Dynamodb,我有一个DynamoDB表,只有两列“EmailId”和“SubscriptionId”。“EmailId”是主排序键,“SubscriptionId”是主分区键。我必须在其中插入一条记录,但在此之前,我需要确保该记录不存在。我以JSON数组格式从第三方API端点获取记录。因此,我必须在表中搜索,并且必须插入表中不存在的记录 我得到的记录格式如下。这是一个示例响应,我可以在数组中获得大约1000条记录 [{ "emailId": "abc1@abc1.com", "subscri

我有一个DynamoDB表,只有两列“EmailId”和“SubscriptionId”。“EmailId”是主排序键,“SubscriptionId”是主分区键。我必须在其中插入一条记录,但在此之前,我需要确保该记录不存在。我以JSON数组格式从第三方API端点获取记录。因此,我必须在表中搜索,并且必须插入表中不存在的记录

我得到的记录格式如下。这是一个示例响应,我可以在数组中获得大约1000条记录

[{
    "emailId": "abc1@abc1.com",
    "subscriptionId": "A1"
}, {
    "emailId": "abc2@abc2.com",
    "subscriptionId": "A2"
}, {
    "emailId": "abc3@abc3.com",
    "subscriptionId": "A3"
}]

我不想从上面的数组中选取每条记录,搜索表,如果找不到,插入它,因为这个表将变得巨大。我们还有别的办法吗?我在NodeJS中使用这个。虽然我不能更改JSON数组,但我可以更改DynamoDB表。有什么建议吗?

batch Write项API可用于将多个项放入一个批中。批处理中的最大请求数为25

最好的部分是,如果
PutRequest
中的键已经存在于表中,它将更新该项,而不是抛出一些错误或异常(即键不是唯一的)

这种方法的缺点是,最新更新将覆盖表中现有项的所有属性。例如,如果表中的现有项有5个属性,而最新更新只有3个属性,则在最新批处理执行后,表将只有3个属性(如最新PutRequest中所示)

var docClient = new AWS.DynamoDB.DocumentClient();    

var params = {
    RequestItems: {
        "subscription": [
            {
                PutRequest: {
                    Item: {
                        "emailId": "abc1@abc1.com",
                        "subscriptionId": "A1"
                    }
                }
            },
            {
                PutRequest: {
                    Item: {
                        "emailId": "abc2@abc2.com",
                        "subscriptionId": "A2"
                    }
                }
            },
            {
                PutRequest: {
                    Item: {
                        "emailId": "abc3@abc3.com",
                        "subscriptionId": "A3"
                    }
                }
            }
        ]
    }
};

docClient.batchWrite(params, function (err, data) {
    if (err) {
        console.error("Unable to write item. Error JSON:", JSON.stringify(err,
            null, 2));
    } else {
        console.log("Write Item succeeded:", JSON.stringify(data, null, 2));
    }
});