gpt4 book ai didi

javascript - 如何设计服务端和客户端的firestore关系

转载 作者:行者123 更新时间:2023-11-30 19:49:06 25 4
gpt4 key购买 nike

我正在设计一个 firestore 数据库,试图理解 no-sql。让我陷入困境的是人际关系。我知道我应该保留根级集合并将它们与引用相关联,但我不明白一旦数据在客户端上如何管理这些关系。说这是我的数据(没有关系)......

Schools (collection)
JFKElementary (doc)
address: 123 Elm Street

Classrooms (collection)
Room1 (doc)
roomNumber: 1
Room2 (doc) ...

Families (collection)
Jones.1234 (doc)
address: 456 Cherry Lane
Smith.2134 (doc) ...

Students
Billy.Jones.2323 (doc)
name: Billy Jones

我需要表示“Billy Jones”属于 Jones.1234 家族,他属于 Room1 教室,并且教室和这个家庭属于 JFKElementary 学校。我知道我可以在文档中放置 refs,就像这样......

Classrooms (collection)
Room1 (doc)
roomNumber: 1
school: ref to JFK Elementary

Students
Billy.Jones.2323 (doc)
name: Billy Jones
family: ref to Jones.1234
classroom: ref to Room1
school: ref to JFK Elementary

我想在客户端得到一个whole school,所以我想我可以这样查询:

collection('classrooms').where("school", "==", <school ref>)  
collection('students').where("school", "==", <school ref>)
// etc for families

这让我得到了整个学校,但留下了我的问题:在客户端,我如何组装 UI 需要的关系?例如,假设 UI 想要显示 Room1 中所有学生的姓名...

let room1 = classroomsSnapshot.docs[0]
let room1Students = studentsSnapshot.docs.filter(student => {
return student.data().classroom.id === room1.id
})

我不希望每次我需要一个房间的学生时都运行所有代码。我可以像这样在客户端上构建自己的类吗?

class ClientSideClassroom {
constructor(doc, studentsSnapshot) {
this.doc = doc
this.students = studentsSnapshot.docs.filter(student => {
return student.data().classroom.id === room1.id
})
}

在快照上...

let clientClassrooms = classroomsSnapshot.docs().map(doc => {
return new ClientSideClassroom(doc, studentsSnapshot)
})

如果是这样,那么学生文档(以及所有其他文档)也将需要自己的类,例如回答他们所属的 ClientSideClassroom我现在必须为每个 firestore 文档保留两个对象吗? “真正的”一个和保持关系的包装器?

即使我对这些系列有前瞻性的指示,我也不认为这会让我领先。例如

Classrooms (collections)
Room1 (doc)
students: [ref to Billy.Jones.123, ...

我不会用 get 查询那个教室的学生,因为我在学生查询中得到了整个集合。但我仍然需要将学生数组转换为实际文档数组,而不是 refs....

// ClientSideClassroom class constructor
this.students = this.doc.data().students.map(studentRef => {
return // find the student in the studentsSnapshot with studentRef
})

我是不是做错了?

最佳答案

将所有学生姓名放入 classA 文档中。 - 您可以获得特定类(class)的所有学生姓名。 classCollection 会有很多 classA,classB,classC 等 doc

将所有家庭成员的姓名放入 familyJones 文档中 - 您可以在一个家庭文档中获取所有家庭成员的姓名

在用户jones的文档上,将他的所有详细信息,如类(class)、家庭、学校、家庭住址放在一个文档中

这个视频对你有帮助 https://youtu.be/v_hR4K4auoQ

关于javascript - 如何设计服务端和客户端的firestore关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54655785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com