Continuing from my latest thread: Should Areas (country, province, city, district) fields inside Listing collections stamped as index? - Working with Data - MongoDB Developer Community Forums
Think of each user can like many posts or products that they want, this is a Many to Many relationships. In SQL we could have a table named likes
or user_likes
to store the user’s liked items.
Remember that, of course, a user can store thousand or perhaps millions.
But how to accomplish it in MongoDB? There are 3 scenarios or schemas that I can think of;
#1 The ??? Pattern
I don’t know what or how to name it, but with this pattern, we could have a collection that automatically creates 1 document for each user. This document would store all the liked items’ ID by the user.
The naming convention for every ID within this collection would be user ID
, therefore whenever we would like to get or compare items whether they’re liked by the user, we would just have to query this particular document that belongs to a user.
#2 Many to Many documents
Think of this collection is a pivot table in the SQL world, thus every document here are a pivot document that similar to pivot rows SQL.
Within every document, we will store the user_id
and the item_id
.
#3 Document references
As stated here: Model One-to-Many Relationships with Document References — MongoDB Manual
Within the items
collection, we would store all the user ID who likes the item.
Thank you everyone at MongoDB.