Search code examples
javascriptjsonamazon-web-servicesamazon-dynamodbaws-sdk-js

Is it possible to query JSON data from amazon Dynamodb using javascript SDK


I need help on amazon Dynamo. I am looking to special query in dynamodb

my JSON looks below

{
  blocknumber: '20',
  BusinessData: {
    BASE_UNIT: 'kg',
    FARMERID: 'FAINKABR0001',
    FARMLOCATION: 'Farm 3927',
    GAPINFO: {},
    PLANTINGDATE: '2020-11-02T18:30:00.000Z',
    PRODUCEQUANTITES: [
      {
        name: 'Priya',
        qty: 200
      }
    ],
    SELECTED_UNIT: {
      NAME: 'kg'
    }
  },
  chaincodeID: 'producechaincode',
  docType: 'Produce',
  PRID: 'PRFAINKABR0007',
  PRODUCE: 'Sweetcorn',
  STATUS: 'Approved',
  timestamp: '2020-12-06T13:03:08.857Z'
}

I would like to query all Data(Produce) where FARMERID is 'FAINKABR0001'. I went through all of the examples but it seems that I can query only on hash key, sort key and using GSI. Can we query it using Javascript SDK of AWS?

Thanks in advance


Solution

  • The Query operation in DynamoDB finds items based on primary key values. You can query any table or secondary index (GSI) that has a composite primary key (a partition key and a sort key).

    Now for your question, you have two options:
    Option 1

    • Make FARMERID as your GSI

    Option 2

    • Use Scan method and filter the result

    Now you will need to do cost evaluation based on your need. Each method has it's own pros and cons.

    PFB some references:

    Scan-JS SDK

    Query-DDB

    Based on comment, one approach could be

    var data = 
    [
        {
      blocknumber: '20',
      BusinessData: {
        BASE_UNIT: 'kg',
        FARMERID: 'FAINKABR0001',
        FARMLOCATION: 'Farm 3927',
        GAPINFO: {},
        PLANTINGDATE: '2020-11-02T18:30:00.000Z',
        PRODUCEQUANTITES: [
          {
            name: 'Priya',
            qty: 200
          }
        ],
        SELECTED_UNIT: {
          NAME: 'kg'
        }
      },
      chaincodeID: 'producechaincode',
      docType: 'Produce',
      PRID: 'PRFAINKABR0007',
      PRODUCE: 'Sweetcorn',
      STATUS: 'Approved',
      timestamp: '2020-12-06T13:03:08.857Z'
    },
    {
      blocknumber: '20',
      BusinessData: {
        BASE_UNIT: 'kg',
        FARMERID: 'FAINKABR0002',
        FARMLOCATION: 'Farm 3927',
        GAPINFO: {},
        PLANTINGDATE: '2020-11-02T18:30:00.000Z',
        PRODUCEQUANTITES: [
          {
            name: 'Priya',
            qty: 200
          }
        ],
        SELECTED_UNIT: {
          NAME: 'kg'
        }
      },
      chaincodeID: 'producechaincode',
      docType: 'Produce',
      PRID: 'PRFAINKABR0007',
      PRODUCE: 'Sweetcorn',
      STATUS: 'Approved',
      timestamp: '2020-12-06T13:03:08.857Z'
    },
    
    {
      blocknumber: '20',
      BusinessData: {
        BASE_UNIT: 'kg',
        FARMERID: 'FAINKABR0001',
        FARMLOCATION: 'Farm 3927',
        GAPINFO: {},
        PLANTINGDATE: '2020-11-02T18:30:00.000Z',
        PRODUCEQUANTITES: [
          {
            name: 'Priya',
            qty: 200
          }
        ],
        SELECTED_UNIT: {
          NAME: 'kg'
        }
      },
      chaincodeID: 'producechaincode',
      docType: 'Produce',
      PRID: 'PRFAINKABR0007',
      PRODUCE: 'Sweetcorn',
      STATUS: 'Approved',
      timestamp: '2020-12-06T13:03:08.857Z'
    }
    ];
    
    function filterResponse(data, id) {
      for(var i = 0; i < data.length; i++) {
        if(data[i].BusinessData.FARMERID === id ) {
          console.log(data[i]);
        }
      }
    }
    
    filterResponse(data, "FAINKABR0001");