假设我有这种结构
A (collection): {
a (doc): {
name:'Tim',
B (collection):{
b (doc): {
color:'blue'
}
}
}
}
其中A
和B
是集合,A
和B
是文档
有没有一种方法可以通过一个查询获得根文档中包含的所有内容<如果我这样问
db.collection("A").doc("a").get()
我只得到名称:'Tim'
字段。我想要的是B的所有文件
我基本上希望我的查询返回
{
user:'Tim',
B (collection):{
b (doc): {
color:'blue'
}
}
}
是否可能或者我真的需要对每个集合进行多个查询:/?
假设我有一个代表用户配置文件的非常深的嵌套集合树,我的成本会像地狱一样上升,因为每次我加载用户配置文件时,我都有一个读取请求的乘数1 x N
其中N是我的树的深度: /.
添加到Matt R答案中,如果你使用babel或者你可以使用async/wait,你可以用更少的代码得到相同的结果(没有捕获/然后
):
// Get reference to all of the documents
console.log("Retrieving list of documents in collection");
let documents = await collectionRef.get();
documents.forEach(async doc => {
console.log("Parent Document ID: ", doc.id);
let subCollectionDocs = await collectionRef.doc(doc.id).collection("subCollection").get()
subCollectionDocs.forEach(subCollectionDoc => {
subCollectionDoc.forEach(doc => {
console.log("Sub Document ID: ", doc.id);
})
});
众所周知,默认情况下,云火中的查询很浅。这种类型的查询不受支持,尽管谷歌将来可能会考虑这种查询。
如果您担心每次拉取的成本,那么您需要根据您的常见视图/拉取需求来构建数据,而不是根据您可能更喜欢的完美结构来构建数据。如果你需要每次把这些东西拉在一起,考虑使用“地图”来处理那些实际上不需要是文档的子集合。
在本例中,“首选项”是一个地图。
{
user: "Tim",
preferences: {
color: "blue",
nickname: "Timster"
}
}
每个文档的大小也被限制在1MB——因此,如果您需要为该用户存储一些可以扩展并继续增长的内容,比如日志记录,那么将日志分解为一个子集合是有意义的,只有在您需要时才会被提取,使每个日志条目成为一个单独的文档。。。所有用户的所有日志是存储在单独的父集合中,还是存储在每个用户的子集合中,这实际上取决于您将如何提取日志,以及如何实现快速的速度,并与提取成本相平衡。如果你向这个用户展示他们最近的10次搜索,那么搜索日志作为一个子集合是很有意义的。如果要提取所有用户的所有搜索数据进行分析,那么单独的父级收集是有意义的,因为您可以在一次提取中提取所有日志,以防止需要分别从每个用户提取日志。
为了方便起见,你也可以把你的拉和promise嵌套在一起。
// Get reference to all of the documents
console.log("Retrieving list of documents in collection");
let documents = collectionRef.limit(1).get()
.then(snapshot => {
snapshot.forEach(doc => {
console.log("Parent Document ID: ", doc.id);
let subCollectionDocs = collectionRef.doc(doc.id).collection("subCollection").get()
.then(snapshot => {
snapshot.forEach(doc => {
console.log("Sub Document ID: ", doc.id);
})
}).catch(err => {
console.log("Error getting sub-collection documents", err);
})
});
}).catch(err => {
console.log("Error getting documents", err);
});
我正在使用Java开发一个Android应用程序,我使用firestore数据库,我有一个名为用户位置的集合,其结构类似于照片: 分贝 我的问题是,当一个用户改变他的位置或一个新用户进入一个已经存在的位置(其他用户有相同的位置)时,它会创建一个新文档(如在“oran, algerie”中)。当我添加新用户并更新文档时,我想使用,但问题是我无法以正常方式检索根集合的所有文档: 它返回null。我尝试
我现在有一个firestore,看起来像这样: 我使用的是,我试图获取“报告”集合中的所有文档。 我可以得到一个报告: 但我无法得到整个子集合 这可能吗?我是新手,所以这可能是一个愚蠢的问题。 谢谢 编辑控制台中收到的错误消息是: 我不确定权限,我没有访问权限,但如果是权限问题,我很困惑,我可以从集合中获取一个文档,但找不到获取所有文档的方法
我在我的FiRecovery数据库中查询子集合内的所有文档时遇到困难。(我使用的是Node.js) 我的目标是从名为 我看了看留档https://firebase.google.com/docs/firestore/query-data/get-data但没有任何结果如何解决问题。 我现在的问题是这样的: 但是我得到了
使用go和FireStore创建web应用程序。我遇到了一个奇怪的问题。如果使用NewDoc方法保存数据 我可以使用 现在,当我只想查找博客集合中的所有文档时,这是很棒的。但是我遇到了无法从blogs集合中查询特定blog的问题。我通过查看文档和保存类似的帖子来解决这个问题。 但是,由于我自己创建了docID,所以从整个集合中检索所有文档时使用
据我所知,我可以使用云函数以某种方式实现这一点?我试着阅读云函数,但我很迷路。是否有一种方法可以触发云函数,在用户更新帖子时删除子集合中的所有文档?
我试图设置一个聊天应用程序,在其中你可以搜索随机的用户交谈。现在,firestore中的数据库结构如下: 集合“users”-文档“userid”-集合“conversations”-文档“conversationid”-字段“partner”,“lastmessage” 其次,我有一个集合“conversations”,其中包含对话中的所有消息。 我现在尝试做的是,当你按下一个按钮时,应用程序将