【发布时间】:2022-06-15 07:33:36
【问题描述】:
我的 Firestore 中有一个当前结构。
数据模型:
- users (collection)
- 9d5UCo4RtyTosiFAIvnPK4zFCUk1 ( each user is a separate document )
- trips ( collection )
- New York (Document)
- fields: date, description, photos:[url1, url2, ....] ( fields in the New York document), status:public
- Los Angeles
....
现在我想为纽约、洛杉矶等照片数组中的每张照片添加注释、喜欢和元数据。 我有一些想法,但不确定哪个是可扩展的,是否适合我想要处理笔记、喜欢和元数据。
笔记不必与照片同时加载。用户将单击打开注释,这可能是对 DB 的新查询。但是每张照片在显示照片时确实需要知道每张照片关联了多少条笔记。
解决方案 1:
photos 数组将是一个对象。
const photos = {
isdffd: {
url: "path",
likes: 100,
metadata: {
...
},
},
xxydfsd: {
url: `path`,
likes: 10,
metadata: {
...
}
},
};
然后,我有一组笔记备份到旅行所在的位置,并使用照片 ID 作为笔记的 ID。但这将我限制为每张照片 1 个注释,我希望能够添加多个注释。
我还希望能够构建一个搜索页面,该页面将搜索所有旅行中的所有笔记,并在结果中按旅行分组显示它们。
对于这种设置有什么好的方法,而我目前的大部分结构都使用子集合。
解决方案 2:
在每个旅行文档中添加另一个子集合,称为照片 每张照片都是自己的文档,包含喜欢、元数据和注释。但是笔记需要是每个照片文档的子集合。这将使搜索每张照片的所有行程和所有笔记变得困难。
【问题讨论】:
-
我们通常根据要执行的查询来构建 Firestore 数据库。这些查询是什么?
-
感谢@AlexMamo,正如您从我的帖子中看到的那样,到目前为止的查询将是用户 > userId > 旅行 > 旅行文档 > 字段:日期、描述、照片:[]。查询:collection("users") .doc(userId as string) .collection("trips") .get();
-
上面的查询暂时没问题,但我想为旅行文档数组中的每张照片添加多个注释。这是子集合可能会变得更深的地方,并且不确定添加更多子集合或像我的第一个前置解决方案那样在更高的位置添加注释子集合是否是个好主意。也许再通读一遍帖子并专注于注释部分。感谢您的反馈意见。另一个重要的注意事项是,我希望能够轻松地搜索所有笔记,这对于我正在阅读的文档中的深层嵌套子集合来说很难做到。
-
所以为了更好地理解,问题更多的在于你不知道嵌套一些子集合是否比添加顶级集合更好?
-
是的,这就是问题的一部分。其他部分基于该问题的答案。例如,如果它们是其他嵌套集合的子集合,则在所有笔记中处理搜索的最佳方式,正如我在帖子和我目前拥有的设置上方的答案中所示。
标签: database firebase google-cloud-firestore nosql