Angular Firestore-如何在多级文档上执行.set()

Angular Firestore-如何在多级文档上执行.set(),angular,google-cloud-firestore,Angular,Google Cloud Firestore,我似乎在Firestore文档中找不到这个问题的答案,但是如果我想做像这样简单的事情,在Angular 6应用程序中: firebase.firestore().collection(`fb_ad_accounts`).doc(`${adAccountId}/${id}`).set({ name: name, id: id, date_created: new Date().getTime() }) 我得到一个错误,上面写着 Error: Uncaught (in promise)

我似乎在Firestore文档中找不到这个问题的答案,但是如果我想做像这样简单的事情,在Angular 6应用程序中:

firebase.firestore().collection(`fb_ad_accounts`).doc(`${adAccountId}/${id}`).set({
  name: name,
  id: id,
  date_created: new Date().getTime()
})
我得到一个错误,上面写着

Error: Uncaught (in promise): FirebaseError: [code=invalid-argument]: Invalid document reference. Document references must have an even number of segments, but fb_ad_accounts/779737999495825/249155905774166 has 3
我希望像这样构建数据,但我不知道如何将一个简单的
add()
添加到一个看起来像
fb\u ad\u accounts//

我是不是漏掉了什么明显的东西


提前谢谢

在Firestore中,文档只能包含带值的字段。文档不能包含其他文档

文档下面可能有组织的子集合(每个子集合都有自己的文档),但这些子集合在技术上并不包含在文档本身中

错误消息本质上是提醒您这些事实,但以某种数学方式

如果希望一个文档在另一个文档中显示为“嵌套”,则必须选择它将显示的子集合的名称。例如:

fb_ad_accounts/<account_id>/ads/<ad_account_id>
fb\u广告账户//广告/

注意,“ads”子集合显示在文档下方。从数学上讲,它是文档的有效路径,因为它有偶数个路径组件(4)。

hmm很有趣,所以这是一种解决方法吗?有了实时数据库,我知道你可以像这样构造数据库,这样你就可以查询fb\u ad\u账户/并获得该树中的所有广告账户。这就是我在这里要做的。通过添加
广告
,它引入了我必须在我的客户机上说明的另一层。这是唯一的方法吗?Firestore中的查询很肤浅——它们不会查看匹配文档的子集合内部。实时数据库中的查询是深层的——检索节点下的所有内容。这导致了不同的建模和查询,并且没有真正的“解决方法”。他们只是不同而已。您必须执行一次查询/获取以获取感兴趣的文档,然后对您还需要的每个子集合执行另一次查询。这很有意义。因此,我对如何构造查询以从(在我们的示例中)
fb\u ad\u accounts//ads
获取数据感到有点困惑。执行
firebase.firestore().doc(
fb_ad_accounts/${adAccountId}/ads
).get().then()
会导致另一个关于
偶数段问题的错误,我找不到在这样的示例中概述要做什么的文档:/Use collection()而不是doc()要建立一个集合参考。顺便说一句,如果你有更多的问题,通常是从另一个问题开始,而不是像这样扩展评论部分。