2017-11-16 4 views
0

데이터베이스로 DynamoDB를 사용하는 응용 프로그램에서 작업하고 있습니다. 내가 좋아하는 사용자의 테이블이 있습니다 [1,5,8] 내가 하나의 쿼리를 사용하여 모든 사용자를로드 할 : 식별자가 같은 경우DynamoDB에서 1 ​​차 ID 배열로 여러 데이터 쿼리

지금 내 요구 사항이
{ 
    id: 1, (Primary Key) 
    name: "Indranil" 
} 

, 내가 배열을 가지고 있습니다.

이제 id를 keyConditionExpreassion으로 사용하고 각 사용자 데이터를 차례로 가져올 수 있지만 여러 개의 쿼리가 생성됩니다.

let readparams = { 
     TableName : "user", 
     KeyConditionExpression: "# = :", 
     ExpressionAttributeNames:{ 
     "#": "id" 
     }, 
     ExpressionAttributeValues: { 
     ":id":1 
     } 
    }; 

그럼 내가 거기 표현에 '의'동작은하지만은, 그것은 FilterExpreassion에서 사용할 수있는 KeyConditionExpression에서 사용할 수 없습니다하지만 filterExpression에 내가 기본 키를 사용할 수 없습니다 보았다. 또한 쿼리에서 필터 표현식 만 전달할 수는 없지만 키 표현식을 전달해야하지만 제 경우에는 확인해야 할 다른 조건이 없습니다. 그래서 결국 내가 유일한 옵션 왼쪽했습니다

let readparams = { 
     TableName : "user", 
     FilterExpression: "id IN (:id1, :id2)", 
     ExpressionAttributeValues: { 
     ":id1":1, 
     ":id2":1 
     } 
    }; 

는 프론트 엔드에있는 모든 데이터를로드 한 후 프론트 엔드에 그 사용하여 ID를 필터링,하지만 분명히 그건 좋은 해결책은 전혀 아니다합니다.

누군가 여기서 가장 좋은 해결책을 지적 할 수 있습니까?

답변

1

일괄 가져 오기 항목 API를 사용하여 주요 속성별로 여러 항목을 가져올 수 있습니다. 테이블에 대해 정렬 키가 정의되어 있으면 파티션 및 정렬 키 속성 값을 제공해야합니다.

Batch get item

일부 샘플 코드 : -

var table = "phone"; 

var params = { 
    "RequestItems" : { 
     "phone" : { 
      "Keys" : [ { 
       "phone_num" : "+14085551212", 
       "Country" : "USA" 
      }, 
      { 
       "phone_num" : "+14085551313", 
       "Country" : "USA" 
      } 
      ] 
     } 
    } 

}; 

docClient.batchGet(params, function(err, data) { 
    if (err) { 
     console.error("Unable to read item. Error JSON:", JSON.stringify(err, 
       null, 2)); 
    } else { 
     console.log("GetItem succeeded:", JSON.stringify(data, null, 2)); 
    } 
}); 
+0

덕분에, 그것은 잘 작동합니다. – Indra