为什么非自动生成的文档ID在Firestore控制台中以斜体显示?

Kum*_*mar 11 firebase firebase-console google-cloud-firestore

当我添加一个包含我自己的文档ID(不是自动生成)的文档时,文档Id节点以斜体显示,如Firestore控制台的屏幕截图所示.这背后的原因是什么?

我添加数据的代码是

const billingRef = db
      .collection('billing/test/2017/months/11')
      .doc();

  billingRef
      .set({ name: 'ABC' })
      .then(_ => {
        console.log('saved');
      })
      .catch(err => {
        console.log(err);
      });
Run Code Online (Sandbox Code Playgroud)

上面的代码成功添加了一个节点,但是以斜体添加节点"test"和"months".

截图1 在此输入图像描述

截图2 在此输入图像描述 截图3 在此输入图像描述

我的查询在firestore中为这些记录产生零结果,代码如下.如何查询计费下的所有节点?

db.collection("billing").get().then(function(querySnapshot) {
    console.log(querySnapshot.size) // this is always 0
    querySnapshot.forEach(function(doc) {
        console.log(doc.id, " => ", doc.data());
    });
});
Run Code Online (Sandbox Code Playgroud)

小智 11

在上面我的评论之后,您将在Firestore控制台中看到,对于斜体文档,有一个小文本表示“此文档不存在,它将不会出现在查询或快照中”,对于非斜体,它则显示“此文档”没有数据”,因此直觉是当使用没有任何字段的代码创建文档时,文档为“空”(子集合不计算在内)。如果添加和删除了一个字段,则文档只是空的而不是空的。

由于您对帐单下凭证的查询是斜体的(“ null”或不存在),如上面的文本所述,它们将不会出现在查询中。

解决方案是通过Firestore控制台添加文档,因为此处文档被创建为空,或者如果在代码中添加了字段,并且可能会在不需要时再次将其删除,则文档将出现在查询中。


Tai*_*aio 5

我后来从这个问题的答案中发现问题是为空文档创建一个子集合。这是我的代码,它打开了灰色的文档。

       db.collection('temporal')
            .doc('documentexample')
            .collection("files")
            .add({
              name: "Lorem"
            })
            .catch((error) => {
              console.error("Error adding file: ", error);
            });
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,文档documentexample中没有字段。因此,代码继续创建documentexample(它没有字段),然后在其中创建一个子集合files。根据 firebase 的说法,这只是使第一个文档变灰documentexample

解决方法是首先创建文档,在其中添加一个字段,然后为其创建一个子集合,等等...对于我的用例,我创建了一个函数,该函数创建文档并在用户访问时向其中添加一个字段第一次注册