如果属性与DynamoDBMapper不相等,则为条件写入项

时间:2016-05-25 02:11:53

标签: java amazon-web-services amazon-dynamodb

当您希望使用如下条件时,是否可以使用DynamoDB映射器进行条件写入/更新:如果属性不等于X,则写入? 我想做一个像这样的条件写:

DynamoRecord record = mapper.load(DynamoRecord.class, hashKey);
if (record.getSomeAttr() != terminationValue) {
    mapper.save(newRecord);
}

该属性始终存在。它可以有多个值,表示记录更新应该停止的条件。

我阅读了this articleAWS documentation以及其他一些帖子,但似乎只支持==运算符和exists check。是否可以使用映射器进行!=条件写入?如果是这样,任何指针都非常感激。

感谢。

来自@ notionquest的回复

  1. 使用ComparisonOperator.NE
  2. 如果属性是布尔值,请使用@DynamoDBNativeBoolean对其进行注释,以便在使用ExpectedAttributeValue(new AttributeValue().withBool(true))时获得正确的结果。有关详细信息,请参阅here

2 个答案:

答案 0 :(得分:2)

请使用" withComparisonOperator(ComparisonOperator.NE)"对于NOTEQUALS条件。请参阅以下示例。

DynamoDBSaveExpression saveExpression = new DynamoDBSaveExpression();
       Map expected = new HashMap();
       expected.put("Status", 
          new ExpectedAttributeValue(new AttributeValue(status)).withComparisonOperator(ComparisonOperator.NE));
saveExpression.setExpected(expected);
dynamoDBMapper.save(obj, saveExpression);

答案 1 :(得分:0)

DynamoDBSaveExpression saveExpression = new DynamoDBSaveExpression();
Map expected = new HashMap();
expected.put("Status",new ExpectedAttributeValue(new AttributeValue('NE')));
saveExpression.setExpected(expected);
dynamoDBMapper.save(obj, saveExpression);