Ronak Shetiya
Ronak Shetiya

Reputation: 980

Structuring Data in Firebase Cloud Firestore

I had been trying to structure my database in firestore

my json looks like this

{"UID":"myusrsid","PhotoList":[{"PhotoID":333,"PhotoURL":"url1ofphone"}, {"PhotoID":332,"PhotoURL":"url2ofphoto"} ]}

Here UID is UserID and its unique to users and this UID inside this have Photos List which have photo id and its url

so whenever user upload a new photo if the userid already exist the photo should be added to Photos List and if new user then UID with new user should be created and photo should be added in photo list

I had been scratching my head to structure this

 public class Users
{
    public string UID { get; set; }
    public List<PhotoList> PhotoList { get; set; }
}

public class PhotoList
{
    public int PhotoID { get; set; }
    public string PhotoURL { get; set; }
}

this is my model which I am planing to send and receive data

I am aware of retrieving and storing the data the only thing is right now I need help with how should I structure it. I am using Node js

here is what I had been doing right now

const imageBody = {
            uid,
            imageBase64String,
            
        } = req.body;

        await db.collection('users').doc(imageBody.uid).collection('Photos').doc(imageBody.imageBase64String).create({
            url : imageBody.imageBase64String
        });

Upvotes: 0

Views: 142

Answers (1)

user10264162
user10264162

Reputation:

Firestore has a maximum document size, so storing binary files is not recommended. Rather use Firebase Storage and store the URL in Firestore.

If you still want to store the images in Firestore consider using a flatter structure. You can still maintain strong access control and it will also be easier for other users share photos. By putting access control in the document itself you can get really powerful sharing capability without sacrificing security. So something like:

Users

Photos
  ownerUID
  imageBase64String
  readPrivs

And to access images for a user:

await db.collection("Photos").where("ownerUID", "==", uid).get();

Upvotes: 1

Related Questions