Firebase 如何访问所有文档,我的所有文档在firestore中只有子集合

Firebase 如何访问所有文档,我的所有文档在firestore中只有子集合,firebase,react-native,google-cloud-firestore,Firebase,React Native,Google Cloud Firestore,我在react native中创建了这样的文档,我使用的是rnfirebase库 firestore() .collection('WaterCanData') .doc(EntryDate) .collection('Entries') .doc(values.customerName) .set({ CustomerName: values.customerName,

我在react native中创建了这样的文档,我使用的是rnfirebase库

 firestore()
        .collection('WaterCanData')
        .doc(EntryDate)
        .collection('Entries')
        .doc(values.customerName)
        .set({
            CustomerName: values.customerName,
            CansOut: values.cansOut,
            JarsOut: values.jarsOut,
            EmptyCansIn: values.emptyCansIn,
            JarsIn: values.jarsIn,
            Bottles: values.bottles,
            Ice: values.ice
        })
        .then(() => {
            console.log('Entry added!!!!!!!!!');
        })
当我试图从WaterCanData Collection检索EntryDate时,我无法获取它(文档名称以斜体显示),因此我应该如何检索包含子集合的文档,下面我已附上我的数据结构ss

您的文档以斜体显示的原因是它当前不存在。在CloudFireStore中,子集合可以存在,而无需父文档也存在

如Firebase控制台中所述,不存在的文档不会出现在客户端SDK的查询或快照中

此文档不存在,它不会出现在查询或快照中

如果希望能够获取输入日期,则需要创建文档(可以为空)

firebase.firestore()
.收藏(“水彩画”)
.doc(入口日期)
.set({});//空文件
要同时创建文档作为其子集合上的条目,可以使用批处理写入,如下所示:

const db=firebase.firestore();
const batch=db.batch();
//获取相关位置的参考
const entryDateRef=db
.收藏(“水彩画”)
.doc(入口日期);
const customerRef=entryDateRef
.collection('条目')
.doc(values.customerName);
//将要写入的数据排队
set(entryDateRef,{});
batch.set(customerRef{
CustomerName:values.CustomerName,
CansOut:values.CansOut,
JarsOut:values.JarsOut,
EmptyCansIn:values.EmptyCansIn,
JarsIn:values.JarsIn,
瓶子:价值观,瓶子,
Ice:values.Ice
})
//对数据库进行更改
batch.commit()
.然后(()=>{
console.log('Entry added!!!!!!!!!!!');
});
这将允许您使用以下方式列出数据库中的所有输入日期:

firebase.firestore().collection('watercanadata'))
.get()
.然后((querySnapshot)=>{
querySnapshot.forEach(doc=>{
const entryDate=doc.id;
//const customerEntriesRef=单据集合(“条目”);
log('找到的输入日期:'+输入日期);
}
});
如果(作为一个例子)您还想找到有多少条目链接到给定的日期,那么您还需要查询每个子集合(这里的代码有点混乱)

firebase.firestore().collection('watercanadata'))
.get()
.然后((querySnapshot)=>{
常量fetchSizePromises=[];
//对于每个条目日期,获取其“条目”子集合的大小
querySnapshot.forEach(doc=>{
const entryDate=doc.id;
const customerEntriesRef=单据集合(“条目”);
//如果这个get()失败,只需存储错误而不是抛出错误。
const thisEntrySizePromise=customerEntriesRef.get()
.那么(
(entriesQuerySnapshot)=>{
返回{日期:entryDate,大小:entriesQuerySnapshot.size}
},
(错误)=>{
返回{date:entryDate,大小:-1,错误}
}
);
//将此承诺添加到队列中
fetchSizePromises.push(thisEntrySizePromise)
}
//等待所有提取操作并返回其结果
返回承诺。全部(fetchSizePromises);
})
.然后((EntryInfo结果)=>{
//对于每个条目,记录结果
entryInfo结果。forEach((entryInfo)=>{
if(entryInfo.error){
//此条目失败
log(${entryInfo.date}由于错误`,entryInfo.error,`,在它的Entries子集合中有未知数量的客户);
}否则{
//已成功获取大小
log(“${entryInfo.date}在其条目子集合”中有${entryInfo.size}个客户);
}      
}
});

使用下面的代码,您可以控制台waterCanData集合中的每个文档id。在您的数据库中,您只有一个文档,然后它将控制台您的文档id。(10042021)


你想检索什么数据?@suppa98我想检索WaterCanData中的文档,上面写着EntryDate,我想要那些EntryDate,这意味着你想获取所有与abishek收集相关的数据?@suppa98,是的,这将是下一步,但目前我想要保存在“WaterCanData”收集中的“EntryDate”列表。啊哟您想获取10042021.文档密钥吗?获取关于列出日期的第一个代码不会返回任何data@Aariana查看更新的更改我将尝试thanx,还有一个问题是我的数据模型是否正确,在我刚接触firestore时,有什么好的做法可以像我这样构造数据。@Aariana你尝试过吗?有效吗?尝试过吗不要返回samthecodingman解释的任何内容,这将不起作用,因为
WaterCanData
集合下没有任何“真正的”文档。
firestore()
    .collection('WaterCanData')
    .get()
    .then((querySnapshot) => {
     querySnapshot.forEach((doc) => {
     console.log(doc.id)
     });
     })