我想知道在以下情况下,在Firebase中存储数据的最有时负载效率的方法是什么:
有几个文本文档,每个文档都包含许多段落,如下所示:
doc1 {
title: 'first doc',
author: 'John Doe',
creation_date: 1234567890,
paragraphs: {
p001{
text:'This is the first paragraph',
…}
p002{
text:'This is the second paragraph',
…}
}
}
如果我想显示其中一个文档,我只需获取数据快照并从网络中获取整个对象doc1
。
一旦我想只显示title
而是显示所有文档,这种方法似乎有点奇怪。有没有办法排除一些孩子被装上?或者是否有必要重组数据库并收集overview
对象,该对象仅包含所有文档的键和标题?
答案 0 :(得分:2)
从Firebase数据库检索数据时,它始终返回完整的节点。因此,虽然您只能获得文档的标题(使用/documents/doc1/title
),但您无法获得文档列表的标题。
Firebase文档建议您不要在公共根目录下嵌套不同类型的数据。其中一个原因正是您现在要问的问题:您经常需要检索书籍的元数据而不检索其余内容。
因此,建模数据的另一种(也就是更常见的)方法是:
documents: {
doc1: {
title: 'first doc',
author: 'John Doe',
creation_date: 1234567890,
},
doc2: {
title: 'second doc',
author: 'nehalem',
creation_date: 1234567891,
}
},
paragraphs: {
doc1: {
p001{
text:'This is the first paragraph',
…}
p002{
text:'This is the second paragraph',
…}
},
doc2: {
p001{
text:'This is the first paragraph',
…}
p002{
text:'This is the second paragraph',
…}
}
}
现在,您可以通过阅读/查询/documents
获取显示列表的标题,作者和创建日期,然后通过阅读/paragraphs/doc1
获取特定图书的段落。