2016-08-31 1 views
3

나는 내 데이터를 저장하기 위해 아마존 dynamoDb를 사용했습니다. 사용자 ID, 유형 : 문자열node.js를 사용하여 dynamoDb에서 최소값과 최대 값 가져 오기

정렬 키 : 점수, 유형 : 나는이

파티션 키와 같은 데이터베이스를 만들 수

을 그리고 난 일부 행을 삽입했다.

manaf1 | 100

manaf2 | 500

manaf1 | 200

manaf1 | 600

나는 선정 된 사용자의 최대 &의 점수를 받아야합니다. 이것은 내 코드입니다

var AWS = require("aws-sdk"); 

AWS.config.update({ 
    region: "myRegion" 
}); 

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

var params = { 
    "TableName": "tableName", 
    "KeyConditionExpression": "#userid = :userid ", 
    "ExpressionAttributeNames": { 
     "#userid": "userid" 
    }, 
    "ExpressionAttributeValues": { 
     ":userid": { 
      "S": "manaf1" 
     } 
    } 
}; 

docClient.query(params, function (err, data) { 
    if (err) { 
     console.error("Unable to query. Error:", JSON.stringify(err, null, 2)); 
    } else { 
     console.log("Query succeeded."); 
    } 
}); 

하지만이 코드를 실행할 때 오류가 발생했습니다.

Unable to query. Error: { 
    "message": "One or more parameter values were invalid: Condition parameter type does not match schema type", 
    "code": "ValidationException", 
    "time": "2016-08-31T06:12:13.825Z", 
    "requestId": "S1DFFJNDNVV4KQNSO5AEDASFMVJF66Q9ASHDFUAAJG", 
    "statusCode": 400, 
    "retryable": false, 
    "retryDelay": 0 
} 

난 =

  1. (600)는 다수의 최대 또는 최소 얻을 수

    manaf1 최소 점수와 같은 출력 = 100

    manaf1 최대 점수이다 필요 dynamoDb의 필드?

  2. 이 코드와 관련된 문제점은 무엇입니까?

답변

5

아래와 같이 ExpressionAttributeValues를 변경하십시오. 이렇게하면 오류가 해결됩니다.

ExpressionAttributeValues : { 
     ':userid' : 'manaf1'   
    } 

점수를 내림차순으로 정렬하려면 ScanIndexForward를 false로 설정할 수 있습니다. ScanIndexForward가 true의 경우

var params = { 
    TableName : table, 
    KeyConditionExpression : 'userid = :userid', 
    ExpressionAttributeValues : { 
     ':userid' : 'manaf1'   
    }, 
    ScanIndexForward: false 
}; 

는 DynamoDB의 그들이 (정렬 키 값) 저장된 순서 에 결과를 반환합니다. 기본값은 입니다. ScanIndexForward가 false이면 DynamoDB는 정렬 키 값순으로 역순으로 결과를 읽은 다음 클라이언트를 클라이언트에 반환합니다.

형태 : Boolean

는 true로 ScanIndexForward을 설정할 수 있습니다, 오름차순으로 점수를 정렬하려면.

ScanIndexForward을 사용하면 MIN 및 MAX 점수 기록을 결과의 첫 번째 기록으로 얻을 수 있습니다.

관련 문제