结构为
/archive: {
$userId: {
$archiveKey: {
foo: 1
},
...
},
...
}
其中$userId
引用user id
,而$archiveKey
是动态的,由.push()
创建。
是否可以查询archive
参考并获取所有archiveObjects
foo = 1
?或者我是否需要取下整个表格,手动挖掘$userId
并提取archiveObjects
我正在寻找?
答案 0 :(得分:2)
Firebase查询现在可以查询嵌套路径,但路径不能是动态的。
因此,如果您知道uid,则可以使用以下命令查询该用户的存档:
ref.child(authData.uid).orderByChild('foo').equalTo(1).on(...
如果你不知道uid,那么你将不得不创建一个允许你进行查找的数据结构:
archive_category_to_uids: {
foo: {
1: {
uid1: true,
uid2: true
}
}
}
更常见的方法是将档案分成他们自己的顶级列表,并让用户和类别都参考:
users: {
userId1: {
archiveKey1: true,
...
},
...
},
archives: {
archiveKey1: {
foo: 1,
uid: uid1
},
...
},
archiveCategories: {
foo: {
1: {
archiveKey1: true,
archiveKey2: true
}
}
}
现在您可以通过以下方式找到档案:
ref.child('archiveCategories/foo/1').once('value', function(keys) {
keys.forEach(function(key) {
ref.child('archives').child(key.key()).once('value', function(snapshot) {
console.log(snapshot.val());
});
};
});
此过程称为非规范化,在NoSQL数据库中很常见。您正在为应用程序需要使用它的数据建模。有关此模式和其他常见模式的更多信息,建议您阅读此article on NoSQL data modeling。