Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

144
Views
Good data structure for storing collection of items for most effiecient query DynamoDB

I recently ran into a problem where I had to store a collection of data inside an attribute. There is restaurantDB table. The table has an attribute(not required) named "groups" that manages the groups created by the restaurant. These groups have several permissions associated with them. A natural way of thinking is that the groups attribute can be of type list that stores a map(key-value pairs) of the data like group_name, group_id, and permission(that is a list of all permisssions)

table:{
//other fields
id:
groups: L: M: {group_name:S,group_id:S,permission:L :S}
}

e.g.

"groups": [{
    "name": "OWNER",
    "permission": ["READ", "WRITE"]
  },
  {
    "name": "MANAGER",
    "permission": ["READ"],

  }
],

This works fine for creation and appending arbitrary number of users using dynamoDB aws-sdk update with UpdateExpression: 'SET #groups:=list_append(#groups,:newgroup)'

however if i have to do a patch request to modify a permission for a group, say, MANAGER, How can i retrieve the Map object inside the list with key group_name:"MANAGER" without fetching the whole array of Groups.

I don't want to patch it by fetching the whole list because I will first have to query to get hold of the groups attribute, then I'll have to iterate through whole of the array to findgroup_name:"MANAGER". Once I get hold of it I'll then modify the array then put the whole list back with an update.

The group names are gauranteed to be unique(however the client also wants a unique group_id) so I thought of a data structure something like

table:{
    //other fields
    id:
    groups: M:{S:L}
    }

e.g.

"groups":{
  "OWNER":["READ","WRITE"],
  "MANAGER":["READ"]
}

Though now I cannot enter arbitrary number of data to create a new group(as in POST request) but I can do it one at a time. Also PATCH request now work fine as

UpdateExpression:
  "set #groups.#groupName = :newPermission",
  ExpressionAttributeNames: {
    "#groups": "groups",
    "#groupName": `${groupName}`, //groupName taken from request Body
  },
  ExpressionAttributeValues: {
    ":newPermission": permission, //permission taken from request body
  },

I wanted to know if there was a better way to retrieve list types. The documentation syas we can retrive list items with Indices however I don't know the index in advance.

about 4 years ago · Juan Pablo Isaza
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!