Node.js Firebase Cloud Firestore中的结构化数据

Node.js Firebase Cloud Firestore中的结构化数据,node.js,firebase,google-cloud-firestore,google-cloud-functions,Node.js,Firebase,Google Cloud Firestore,Google Cloud Functions,我一直试图在firestore中构建我的数据库 我的json看起来像这样 {"UID":"myusrsid","PhotoList":[{"PhotoID":333,"PhotoURL":"url1ofphone"}, {"PhotoID":332,"PhotoURL":"url2ofphoto"} ]} 这里的UI

我一直试图在firestore中构建我的数据库

我的json看起来像这样

{"UID":"myusrsid","PhotoList":[{"PhotoID":333,"PhotoURL":"url1ofphone"}, {"PhotoID":332,"PhotoURL":"url2ofphoto"} ]}
这里的UID是用户id,它对用户是唯一的,这个UID在这个有照片列表中,有照片id和它的url

因此,每当用户上传一张新照片时,如果用户ID已经存在,则应将照片添加到照片列表中 若为新用户,则应创建具有新用户的UID,并将照片添加到照片列表中

我一直在绞尽脑汁来组织这件事

 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; }
}

Firestore具有最大文档大小,因此不建议存储二进制文件。而是使用Firebase存储并将URL存储在Firestore中

如果您仍然想将图像存储在FixSt店中,请考虑使用扁平的结构。您仍然可以保持强大的访问控制,其他用户共享照片也会更容易。通过对文档本身进行访问控制,您可以在不牺牲安全性的情况下获得真正强大的共享功能。比如:

Users

Photos
  ownerUID
  imageBase64String
  readPrivs
以及为用户访问图像:

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

Firebase实时数据库和Cloud Firestore是两个独立的数据库。请仅使用相关标签标记您的问题,而不是同时使用这两个标签。
await db.collection("Photos").where("ownerUID", "==", uid).get();