Firestore无法获取空文档

时间:2018-07-01 08:08:25

标签: javascript google-cloud-firestore

我收集了一些文档,其中doc的id是用户的id。 让我们调用这些用户文档。

每个“用户文档”都包含聊天消息的子集合。但并非所有“用户文档”都包含任何字段(数据,而不是子集合)。

我将不返回不包含任何字段但具有子集合的集合中的所有文档,但是我看来这不可能吗?

var allUserDocs = {}, 
    count = 0,
    users = firestore.collection("users");

users.get().then(snapshot => {
    snapshot.forEach(doc => {           
        count++;
        allUserDocs[count] = doc.data();            
    });

    allUserDocs.count = count;
    res.status(200).send(allUserDocs);          
})

此代码仅返回包含字段的文档,而不返回仅包含子集合的文档?有办法退还全部吗?

如何获取集合中所有文档ID的列表? 还是如果我无法访问它们,我该如何为所有没有字段的文档添加字段?

2 个答案:

答案 0 :(得分:0)

使用doc.id

users.get().then(snapshot => {
    snapshot.forEach(doc => {           
        count++;
        allUserDocs[doc.id] = doc.data();            
    });

    allUserDocs.count = count;
    res.status(200).send(allUserDocs);          
})

答案 1 :(得分:0)

有一个 listDocuments 方法,用于检索所有具有子集合的文档(无论是否丢失)。这是page in the docs对其进行说明。

您可能正在寻找这样的东西:

let collectionRef = firestore.collection('col');

return collectionRef.listDocuments().then(documentRefs => {
   return firestore.getAll(...documentRefs);
}).then(documentSnapshots => {
   for (let documentSnapshot of documentSnapshots) {
      if (documentSnapshot.exists) {
        console.log(`Found document with data: ${documentSnapshot.id}`);
      } else {
        console.log(`Found missing document: ${documentSnapshot.id}`);
      }
   }
});

您不必担心docRef是否存在。

尽管如此,听起来空文档听起来不是一个好的解决方案。您在用户可以为空但其下的消息仍然很重要的体系结构上追求的逻辑是什么?也许如果您仍然需要访问它们,则可以添加一个布尔变量来确定用户是否处于活动状态,而不用保留空白文档。