2017-05-29 72 views
0

我有作为身份证,VIN(车辆识别号码)排序键作为时间戳,我想执行查询,并希望知道最新的记录有最大时间戳(只有单记录基于vin与最新的时间戳)。Dynamo Db与最新数据

回答

2

您可以使用Query API与ScanIndexForward为假,Limit等于1来实现结果。

  • ScanIndexForward =假 - >装置以降序 顺序排列的排序键
  • 极限= 1 - >意味着返回只有一个项目

示例代码: -

var params = { 
    TableName : "yourtablename", 
    KeyConditionExpression: "#VIN = :vinvalue", 
    ExpressionAttributeNames:{ 
     "#VIN": "VIN" 
    }, 
    ExpressionAttributeValues: { 
     ":vinvalue":"somevinvalue" 
    }, 
    ScanIndexForward : false, 
    Limit : 1 
}; 

docClient.query(params, function(err, data) { 
    if (err) { 
     console.error("Unable to query. Error:", JSON.stringify(err, null, 2)); 
    } else { 
     console.log("Query succeeded."); 
     data.Items.forEach(function(item) { 
      console.log(" -", item.year + ": " + item.title); 
     }); 
    } 
}); 
0
 public EventLogEntity fetch(String vin) { 

       EventLogEntity eventLogEntityResult = null; 
       EventLogEntity entity = new EventLogEntity(); 
       entity.setId(vin); 
       DynamoDBQueryExpression<EventLogEntity> queryExpression = 
    new DynamoDBQueryExpression<EventLogEntity>().withHashKeyValues(entity); 

//DynamoDBQueryExpression Works only for Partition, Sort and Indexes in Dynamo Db 

       queryExpression.setScanIndexForward(false); // Will give you result in descending order 
       queryExpression.withLimit(1);// Will always give you single record 
       List<EventLogEntity> result = dynamoDBMapper.queryPage(EventLogEntity.class, queryExpression).getResults(); 

       if (result != null && !result.isEmpty()) { 
        eventLogEntityResult = result.get(0); 
       } 
       return eventLogEntityResult; 
      }