Flutter中Firebase Firestore指定UID文档不存在问题咨询
问题原因及解决思路
核心原因
Firestore 的文档不会因为其下存在子集合而自动创建实体文档。
你第一段代码的逻辑是:在 path(对应domain集合)下,以用户UID作为文档ID,在该文档的子集合 collectionName 中添加数据。但你只操作了子集合,没有给用户UID对应的父文档写入任何字段内容——Firestore 规定,只有当你显式向某个文档写入数据(哪怕是空对象)时,这个文档才会被视为真实存在的实体。如果仅在其子集合中存储数据,这个父文档只是一个用于定位子集合的路径节点,并非实际存在的文档,所以控制台会提示「The document does not exists, it will not appear in queries or shapshots」。
而第二段代码直接调用 .add() 在 path 集合下创建文档,.add() 会自动生成文档ID并写入数据,这个文档有实际的字段内容,属于真实存在的实体,因此不会出现上述提示。
解决方式
- 如果需要让用户UID对应的文档在控制台中显示为存在,可以在创建子集合数据的同时,给该文档写入至少一个字段(哪怕是空对象):
// 先创建/更新用户UID文档,再操作子集合 await FirebaseFirestore.instance .collection(path) .doc(firebaseUser.uid) .set({}); // 写入空对象,让文档成为实体 await FirebaseFirestore.instance .collection(path) .doc(firebaseUser.uid) .collection(collectionName) .add({...}); - 如果你不需要在控制台看到这个父文档,也可以忽略该提示——子集合中的数据完全可以正常查询和使用,只是父文档不会出现在集合的文档列表中而已。
内容的提问来源于stack exchange,提问作者Tai Tech
相关产品推荐
相关产品推荐

