Javascript 在Firebase中查询多个集合
我与Firebase合作了一段时间,我喜欢他们关于保持数据非规范化的建议。我唯一的问题是找出跨多个集合查询的最佳方法。例如,我有一个Identity对象,它保存我的用户信息:Javascript 在Firebase中查询多个集合,javascript,firebase,firebase-realtime-database,nosql,Javascript,Firebase,Firebase Realtime Database,Nosql,我与Firebase合作了一段时间,我喜欢他们关于保持数据非规范化的建议。我唯一的问题是找出跨多个集合查询的最佳方法。例如,我有一个Identity对象,它保存我的用户信息: identities: { $identity: { name: string, studio: $studioID }} 对应于Studio对象的: studios: { $studio: { name: string, owner: $identityID, locat
identities: {
$identity: {
name: string,
studio: $studioID
}}
对应于Studio对象的:
studios: {
$studio: {
name: string,
owner: $identityID,
location: $locationID
}}
此对象引用所有者及其位置。location对象引用类,类引用学生。。。。不断地。现在,为了获取引用对象,我正在执行以下操作:
Auth.loginUser(email, password, (success) => {
const identityRef = firebase.database().ref('/identity');
identityRef.child(success.uid).on("value", function(identitySnapshot) {
const identity = identitySnapshot.val();
const studioRef = firebase.database().ref('/studios');
dispatch({type: 'UPDATE_IDENTITY', identity})
studioRef.child(identity.studioID).on("value", function(studioSnapshot) {
const studio = studioSnapshot.val();
dispatch({type: 'UPDATE_STUDIO', studio});
})}); });
我会继续为地点、班级、学生等打电话。有更好的方法吗?考虑以下结构:
identities: {
$identityKey: {
name: string
}
}
identities_studios: {
$identityKey: {
$studioKey: {
name: string
}
}
}
identities_studios_locations: {
$identityKey: {
$studioKey: {
$locationKey: {
lat: string,
lng: string
}
}
}
}
第一个,标识
,通常只存储有关标识的信息
第二个,identifications\u studios
,只存储有关工作室的信息,但工作室按$identityKey
分组
第三个,identifications\u studiou\u locations
,仅存储有关位置的信息,但它们首先按$studioKey
分组,其次按$identityKey
分组
现在您可以执行以下操作:
const db = firebase.database()
Auth.loginUser(email, password, success => {
db.ref(`/identities/${success.uid}`).on("value", snap => { ... }
db.ref(`/identities_studios/${success.uid}`).on("value", snap => { ... }
db.ref(`/identities_studios_locations/${success.uid}`).on("value", snap => { ... }
}
我们让它们同时运行,而不是一个接一个地发出多个请求
如果您愿意,在从数据库获取所有这些信息后,您可以将数据结构转换为您想要的任何内容:一个用于标识的数组,另一个用于工作室,另一个用于位置,等等。;或者一组带有嵌套工作室的身份,这些工作室又有嵌套的位置等。感谢您花时间回复!我唯一的问题是,我的数据仍然被捆绑在一起,即使它在不同的“集合”中。既然所有东西都绑定到特定的uid,我如何与多个用户共享相同的数据?我之所以把东西分成不同的集合,是为了让它对多个实体可用。