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

时间:2017-12-09 18:30:08

标签: firebase google-cloud-firestore firebase-console

当我使用自己的文档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);
      });

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

截图1 enter image description here

截图2 enter image description here 截图3 enter image description here

我的查询在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());
    });
});

2 个答案:

答案 0 :(得分:5)

按照上面的评论,您将在Firestore控制台中看到,对于斜体中的文档,有一个小文字说"此文档不存在,它不会出现在查询或快照中" ,对于非斜体,它说"此文档没有数据" ,所以直觉是当在没有任何字段的代码中创建Document时,它就是" null" (子集合不计算在内)。如果添加和删除了一个Field,那么Doc​​ument只是空的而不是null。

由于您对结算下的文档的查询是斜体(" null"或者不存在),正如上面的文字所述,它们不会出现在查询中。

解决方案是通过Firestore控制台添加文档,因为这里将Documents创建为空,或者如果在代码中添加一个Field,如果不需要则可以再次删除它,那么Doc​​uments将出现在查询中。 / p>

答案 1 :(得分:1)

问题,后来我从这个问题的answer中发现,我正在为一个空文档创建一个子集合。这是我的代码,显示灰色文档。

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

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

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