如何在Firebase Firestore文档调用set()方法后创建子集合
结论
你的实现方式不符合Firebase Firestore操作规范,运行时会直接报错,无法成功创建子集合。
错误原因
set() 是异步写入方法,返回值为 Future<void> 类型,并非 DocumentReference 实例,无法直接在 set() 后链式调用 collection() 方法,代码在编译阶段就会抛出类型不匹配的错误。
正确写法
你需要先获取对应文档的引用实例,先执行父文档的写入操作,再通过文档引用操作子集合,示例如下:
CollectionReference ref1 = FirebaseFirestore.instance.collection('chatrooms'); // 先获取父文档的引用 DocumentReference chatroomDocRef = ref1.doc(chatroom); // 等待父文档set操作完成 await chatroomDocRef.set({"chatid": chatroom}); // 再通过父文档引用创建子集合的新文档 await chatroomDocRef.collection('messages').add({"message": _message.text});
补充说明
Firestore底层本身允许在父文档不存在的情况下直接写入子集合数据,如果你没有强制要求父文档必须先存在,也可以省略父文档的set操作直接写子集合。但绝大多数业务场景下,建议先写入父文档再操作子集合,避免出现无对应父文档的孤儿子集合数据。
内容的提问来源于stack exchange,提问作者josef
相关产品推荐
相关产品推荐

