Search code examples
firebasegoogle-cloud-firestoredatabase-designnosqlunique

Firebase firestore unique values in multiple fields


I'm creating an application for generating documents with unique id, my issue is that the id needs to be in a specific format ( 00000/A/B) so I can't use firestore document's id's.

The problem is also that I have that id's in different places,

#1 case

users/{userID}/id = //UNIQUE ID HERE

#2 case

users/{userID}/members <= members is an array of objects where every member need a unique id

I was thinking about the separate collection of id's where I can check which one is taken but maybe is there a better way to ensure id is unique across the whole app?


Solution

  • What you're considering is pretty much the only way to guarantee uniqueness of a value across the database.

    In a few more structured steps, it'd be:

    • Use that value as the document ID in an secondary collection. This collection purely exists to ensure uniqueness of the IDs.
    • Let the user claim it, typically by writing their UID into the document.
    • Use security rules to ensure a user can only write a document if it doesn't exist yet, and (if needed) only deleted when they own it.

    The topic of unique values has been covered quite a few times before, although usually in the form of unique user names, so I recommend checking out: