我是一名 React Native 程序员,我在添加 Firestore 的两张截图时遇到了一个不合逻辑的问题,因为那里有一个集合,里面有一些文档。当我使用代码或查询生成器获取集合时,我得到了一个结果。仍然只有一个项目无法获取,请问问题出在哪里?我的 React Native 代码是
useEffect(() => {
console.log('Starting useEffect');
const fetchData = async () => {
const querySnapshot = await firestore()
.collection('chatRooms')
.get();
console.log('All docs count:', querySnapshot.size);
console.log('All document IDs:');
querySnapshot.forEach(doc => {
console.log(`${doc.id}`);
});
// Filter client-side for rooms containing the user
querySnapshot.forEach(doc => {
const data = doc.data();
console.log(`Doc ${doc.id} exists:`, doc.exists);
console.log(`Doc ${doc.id} data:`, data);
console.log(`Doc ${doc.id} data keys:`, Object.keys(data));
console.log(`Doc ${doc.id} empty?:`, Object.keys(data).length === 0);
});
};
fetchData();
}, []);
如图所示,我有4份文件,但只获取到1份。如果有人知道这个问题,请告诉我。
HvN0az1wtzgNqnxkBm14z274LiO2_ai_1
HvN0az1wtzgNqnxkBm14z274LiO2_ai_10
HvN0az1wtzgNqnxkBm14z274LiO2_ai_12
我的文档 ID
“chatRooms”集合没有“一些文档”,只有一个文档,也就是第一个文档。所以你所做的就是创建一个文档,该文档又包含一个名为“messages”的子集合,该子集合又包含 7 个文档。另一个文档根本就不存在。我知道这一点,因为其他三个文档是用斜体字写的,这意味着你在它们内部创建了一个子集合,而没有先创建父文档,所以才会出现这样的结果。
当您以编程方式为文档生成 ID 时,并不意味着您在 Firestore 中创建了实际的文档。请注意,Firestore 文档和子集合的工作方式与您想象的文件系统文件和目录不同。如果您在文档下创建子集合,它不会隐式创建任何父文档。子集合与父文档没有任何关联。
因此,您以这种方式看到这 3 个文档,因为 Firebase 控制台指示该位置下有一些数据,因此您可以进一步导航。就是这样。如果您想获取“chatRooms”集合中的所有文档,请创建它们,然后控制台和项目中的代码将返回预期的结果。