React Native Firebase Firestore按指定ID批量获取文档报错求解
问题原因&解决方法
核心错误梳理
- 误用SDK:
@react-native-firebase/storage是Firebase云存储(文件存储服务)的SDK,完全不具备Firestore文档操作能力,操作Firestore必须使用@react-native-firebase/firestore。 - 文档路径不合法:Firestore路径严格遵循
集合/文档/集合/文档的交替层级规则,只有偶数段的路径才是合法的文档路径,你写的users/user1/img1是3段路径,属于集合路径,因此触发documentPath must point to a document报错。 - API不兼容:你查阅的
getAll是Node.js端Admin Firestore SDK的专属API,React Native使用的客户端Firestore SDK没有提供该方法。
正确实现方案
前提:确认你的Firestore结构
根据你给出的示例数据,默认你的结构为:顶级集合users → 用户文档(ID为user1、user2等)→ 子集合images → 图片文档(ID为img1、img2等),每个图片文档包含fileId、file两个字段。你可以根据自己的实际层级调整路径。
方法1:Promise.all 并行查询(无数量限制,推荐)
构造所有需要查询的文档引用,通过Promise.all并行发起请求,代码如下:
import firestore from "@react-native-firebase/firestore"; // 构造所有目标文档的合法引用 const docRefList = [ firestore().doc('users/user1/images/img1'), firestore().doc('users/user2/images/img2'), firestore().doc('users/user3/images/img3') ]; // 批量查询 Promise.all(docRefList.map(ref => ref.get())) .then(docSnapshots => { const result = []; docSnapshots.forEach(snap => { // 过滤不存在的文档 if (snap.exists) { result.push(snap.data()); } }); // 处理查询结果 console.log('查询结果', result); }) .catch(err => { console.log('查询错误', err); });
方法2:in 查询(仅支持同集合、最多10个ID)
如果你要查询的所有文档都属于同一个集合,可以用documentId的in查询,代码如下:
import firestore from "@react-native-firebase/firestore"; // 目标文档ID列表,最多10个 const targetIds = ['img1', 'img2', 'img3']; // 假设所有文档都在users集合下 firestore() .collection('users') .where(firestore.FieldPath.documentId(), 'in', targetIds) .get() .then(querySnapshot => { const result = []; querySnapshot.forEach(doc => { result.push(doc.data()); }); console.log('查询结果', result); }) .catch(err => console.log('查询错误', err));
内容的提问来源于stack exchange,提问作者rop lop fan
相关产品推荐
相关产品推荐

