Query multiple data with array of primary ids in DynamoDB

12,249

Batch get item API can be used to get multiple items by key attributes. If you have sort key defined for your table, you need to provide both partition and sort key attribute value.

Batch get item

Some sample code:-

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));
    }
});
Share:
12,249
Indranil Mondal
Author by

Indranil Mondal

► I'm a driven, energetic and proactive tech professionally. I consider myself an engagement professional. I'm a proud digital native, spending most of my life with technology. I strive in a team environment as well.◄ ► I've 6.5+ years experience in JavaScript frameworks like React.js, Angular.js, Backbone.js, Ext.js, SAP UI5, React Native, Ionic, Sencha, Node.js, MongoDB etc. I am a continuous learner – always looking for new technologies, in my spare time I search Google for the latest trends . I like to think of myself as a futurist. ◄

Updated on July 25, 2022

Comments

  • Indranil Mondal
    Indranil Mondal almost 2 years

    I'm working on a application that is using DynamoDB as the database. I have a table of users like:

    {
       id: 1, (Primary Key)
       name: "Indranil"
    }
    

    Now my requirement is, I have the array if ids like : [1,5,8] and I want to load all the users using single query.

    Now I'm using the id as keyConditionExpreassion in the query and I can fetch each user data one after another, but then it'll result in multiple queries.

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

    Then I saw there is an 'IN' operation in the expressions but that can't be used in the KeyConditionExpression, it can be used in FilterExpreassion but in filterExpression I can't use primary key. And moreover I can't pass only filter expression in the query I have to pass a key expression as well but in my case I don't have any other condition to check.

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

    So eventually I've left with only option, to load all the data in the frontend and then filter those using ids in the frontend, but obviously that's not a good solution at all.

    Can someone please point out what is the best solution here.

  • Vasiliy Ivanov
    Vasiliy Ivanov over 3 years
    I have partition and sort key for table but I don't know the sort key for all partition ids. Should I use query?
  • Yang
    Yang almost 3 years
    note if you have more than 100 result batchGet will blow up see docs.aws.amazon.com/amazondynamodb/latest/APIReference/… ,