Flutter应用中如何向Cloud Firestore写入文档引用?
如何在Flutter中向Cloud Firestore写入文档引用?
你之前的写法其实只是把一个普通的Map存进了Firestore,难怪结果不符合预期——Firestore不会自动把字符串拼接的路径识别成文档引用类型。要写入控制台里那种可点击、可用于关联查询的文档引用,得用Firestore SDK提供的DocumentReference对象才行,具体步骤如下:
正确的实现方式
1. 获取目标文档的引用对象
首先,你需要先拿到要引用的用户文档的DocumentReference实例,而不是手动拼接字符串路径:
// 旧版本Firestore SDK(比如cloud_firestore < 0.14.0) DocumentReference userRef = Firestore.instance.collection('users').document(uid); // 新版本SDK(cloud_firestore >= 0.14.0 或配合firebase_core使用) final firestore = FirebaseFirestore.instance; DocumentReference userRef = firestore.collection('users').doc(uid);
2. 将引用对象存入数据Map
直接把这个DocumentReference对象放到你的数据Map里,不需要做任何字符串处理:
Map<String, Object> userData = { 'usersReference': userRef };
3. 写入Firestore
最后调用add方法写入即可,注意add方法本身已经会创建新文档并写入数据,不需要额外再调用setData(除非你后续要更新这个文档的其他字段):
// 旧版本示例 Firestore.instance.collection('chats').add(userData) .then((doc) { print('文档引用已成功写入,文档ID: ${doc.documentID}'); }) .catchError((error) { print('写入失败: $error'); }); // 新版本示例 firestore.collection('chats').add(userData) .then((docSnapshot) { print('写入成功,文档ID: ${docSnapshot.id}'); }) .catchError((e) => print('写入出错: $e'));
为什么原来的方法不行?
你之前构造的{ uid: 'users/' + uid }只是一个普通的嵌套Map对象,Firestore会把它当作普通的键值对存储,而不是识别为文档引用类型。只有当你传入SDK提供的DocumentReference实例时,Firestore才会将其标记为文档引用,这样在控制台里就能看到可点击的链接,后续也能通过这个引用直接关联查询对应的用户文档。
内容的提问来源于stack exchange,提问作者tobire
相关产品推荐
相关产品推荐

