我使用Flutter中的Firestore软件包,在带有Firebase数据库的Flutter中执行此操作。 我想知道如何在noSQL(或更具体地说,在Flutter-Firestore)中完成连接
这是我的数据库的样子:
users: {
U1: {
name: 'Peter',
surname: 'Jensen'
},
U2: {
name: 'Marry',
surname: 'Kown'
},
...
}
groups: {
G1: {
name: 'Group 1'
},
G2: {
name: 'Group 2'
},
...
}
members: {
M1: {
userId: U1,
groupId: G1
},
M2: {
userId: U1,
groupId: G2
},
M3: {
userId: U2,
groupId: G1
},
...
}
现在我该如何加入联接以获得这样的东西:
members: {
M1: {
userId: {
name: 'Peter',
surname: 'Jensen'
},
groupId: {
name: 'Group 1'
}
},
M2: {
userId: {
name: 'Peter',
surname: 'Jensen'
},
groupId: {
name: 'Group 2'
}
},
M3: {
userId: {
name: 'Marry',
surname: 'Kown'
},
groupId: {
name: 'Group 1'
}
},
...
}
我愿意吗
const users = await Firestore.instance.collection('users').getDocuments();
const groups = await Firestore.instance.collection('groups').getDocuments();
const members = await Firestore.instance.collection('members').getDocuments();
...manually loop through everything and assign everything myself
(我需要添加更多文本,因为我有“大部分是代码”):我假设以上内容将在Firebase中使用大量查询数据,因此我看不出这是一个好主意。我实际上只想查看用户属于哪个组
答案 0 :(得分:1)
如果您有组和成员,我通常会存储以下数据:
users
集合中的用户列表。groups
集合中的组列表。请注意,您可以将嵌套列表建模为子集合,但是通常不需要。使用上述模型,您甚至可以使用array-contains
子句轻松查询用户所属的组,甚至可以查询属于特定组的用户。
要获取特定用户的组属性列表,您确实确实需要分别加载该用户及其组。对于许多NoSQL数据库,这是正常现象,并且不一定像您预期的那样慢。但是,如果性能不够好,您可以考虑复制一些数据以减少对联接的需求。这完全取决于您的需求,并且与关系数据模型不同,NoSQL并不是教条。
要了解有关此主题的更多信息: