该文档不存在,也不会出现在查询或快照中,但是结构相同的文档有效

wiz*_*loc 6 database firebase google-cloud-firestore

前言:这里已经问这个问题但用户放弃了对第一个答案的解决方案。这个问题也不同,因为我有两个相似的集合结构,但是错误仅发生在其中一个上。

我正在使用Google的新的Firestore数据库,并创建了以下结构:区域/ {区域列表} /调度/ {调度列表} / {调度信息}

我们正在使用此方法通过Firebase Admin SDK在后端创建自定义令牌。当用户在后端登录时,我们会生成令牌并添加他们可以访问的区域作为其他声明,我们打算从安全规则中的auth / request.auth对象访问这些域,以限制他们对调度文档的访问相应地。我提到这个是为了防止我们错误地处理结构,在这种情况下,请纠正我,因为我们是Firestore的新手。

我们遇到的问题是其中一个文档发出警告:“此文档不存在,不会出现在查询或快照中”(请参见下图)。但是,我们有一个相同的文档结构(图像中的文档7)不会发出此警告,并且会出现在查询和快照中。 在此处输入图片说明

Dan*_*ath 8

这是在告诉您territories/6不存在,而是实际存在territories/7

在Cloud Firestore中,可能有“虚拟”文档拥有的子集合-也就是说,较高级别的文档不存在,但是有子级。

这些虚拟文档是组织信息的简便方法,而无需创建重复的虚拟文档。

在这种情况下,您可以:

  1. 在创建文档territories/6之前,在其下创建了一堆调度territories文档,或者
  2. 随后,您已删除territories/6而不删除子集合文档。

  • 那么,在创建子集合时,是否可以动态创建文档?也就是说,如果OP想要添加** territories / 10 / dispatches /...**,他是否首先需要添加** 10 **,然后添加** dispatches **?可以推断出:db.collections(“ territories”)。document(“ 10”)。collection(“ dispatches”)。add(“ ...”)`会为他完成此操作,但是我发现这不是案子。 (7认同)
  • 你能回答@Jaywaa的问题吗?在创建长长的收藏和文档链时,是否可以创建非虚拟文档?请告诉我们! (2认同)

小智 8

不确定这是否可以解决您的问题,但确实可以解决...控制台中的消息:"This document does not exist, it will not appear in queries or snapshots"如果文档中只有子集合而没有字段,则似乎会出现(我想这被称为“虚拟”文档)。

我使用了在现有的“虚拟”文档上set添加虚拟字段(json对象)的方法,从而可以通过快照或查询发现它们。它没有覆盖/删除这些文档的任何子集合。无法通过控制台添加字段。

我的代码:

var docRef = this.fsdb.collection('sessions')
//do for all "virtual" docs in collection
docRef.doc('mySession1').set({dummy: 'dummy'})

docRef.onSnapshot(val => {
   var mySessionsArray: any [] = []
   val.forEach(myDoc => {
    mySessionsArray.push(myDoc.id)
  })
  console.log(mySessionsArray)
})
Run Code Online (Sandbox Code Playgroud)

安慰: ["mySession1", "mySession2", "mySession3"]

免责声明,不是行业程序员:-)