如何使用AWS DynamoDB中的UpdateItem请求传递条件检查项是否不存在

时间:2017-04-23 06:00:56

标签: java amazon-dynamodb

是否可以针对Amazon DynamoDB运行UpdateItem请求,并且该条件在项目尚不存在时始终会成功。例如:

long timestampNow = System.currentTimeMillis();

UpdateItemSpec updateItemSpec = new UpdateItemSpec()
        .withPrimaryKey("primary_key", theKey)
        .withReturnValues(ReturnValue.ALL_NEW)
        .withAttributeUpdate(
                new AttributeUpdate("my_attr").put(timestampNow+SOME_DURATION))
        .withExpected(
                new Expected("my_attr").lt(timestampNow)); 
try {
    UpdateItemOutcome outcome = AWS.DYNAMO_DOC.getTable("my_table").updateItem(updateItemSpec);
    return outcome.getUpdateItemResult().getAttributes();

} catch (ConditionalCheckFailedException e) {
    return null;
}

当我对尚未存在的项目发出请求时,它会抛出ConditionalCheckFailedException,但我希望它通过条件测试并继续创建项目。这可能吗?

1 个答案:

答案 0 :(得分:0)

文档实际上包含了我需要知道的所有内容:

aggregate([
    {
        '$project': {
            newFieldName: {'$dateToString': {format: '%Y-%m-%d', date: '$yourDateFieldName'}}
        }
    }, {
        '$group': {
            _id: {newFieldName: '$newFieldName'},
            viewCount: {'$sum': 1}
        }
    }, 
    {'$sort': {'_id.newFieldName': 1}}
], {})