我有一个包含字符串列表的数组
示例:["one","two","three","four"]
此外,我还有一个示例动力学结构,如下所示
id(primary key) | status
one | completed
three | completed
five | completed
six | Inprogress
我需要使用dynamodb主键检查字符串值是否已存在于dynamodb中(在nodejs中执行此逻辑)。
如果在dynamodb中已存在字符串值,请不要将其添加到新数组中,如果它在dynamodb中不存在,则需要在新数组中添加字符串。
在上面的示例中,数据显示结果为:["two","four"]
。
请让我知道如何检查dynamodb中的现有数据。
提前致谢
答案 0 :(得分:2)
我不确定我是否完全理解您的问题,但我认为您正在寻找dynamodb Exists
请求中的putItem
参数或条件运算符。
要解释the documentation,可以断言执行put操作时记录不存在:
"如果Exists为false,则DynamoDB假定属性值为false 表中不存在。如果实际上价值不存在,那么 假设有效且操作成功。如果找到该值, 尽管假设它不存在,但操作失败 使用ConditionalCheckFailedException。"
同样,应该可以在操作上编写更复杂的断言。
答案 1 :(得分:0)
您可以使用ConditionExpressions完成此操作。
var params = {};
params.TableName = "MyTable";
params.Item = { id : { S : 'one' }, status : { S : 'completed' } },
params.ConditionExpression = '#i <> :val';
params.ExpressionAttributeNames = {'#i' : 'id'};
params.ExpressionAttributeValues = {':val' : "one"};
DynamoDB.putItem(params, function (error, data) { ... });
如果ID为“one”的项目尚不存在,则只会写入表格。
由于您正在使用nodejs,我建议您考虑使用vogels库。相同的ConditionExpression可以写成:
Event.create({id : "one", status : 'completed' }, {overwrite : false}, function (error, acc) { ... });