我从Firestore得到了一些数据。有时,当我打电话来获取数据时,尚未创建该集合。 调用get请求之前,如何检查集合是否存在?
Stream<List<ChatModel>> getChat(ChatFieldModel model) {
var ref = _db.collection('chats');
return ref
.document(model.docId)
.collection('messages')
.orderBy('timestamp', descending: true)
.snapshots()
.map((list) =>
list.documents.map((doc)=>ChatModel.fromForestore(doc)).toList());
}
答案 0 :(得分:2)
我之前曾发布过
final snapshot = await firestore.collection(roomName).getDocuments();
if (snapshot.documents.length == 0) {
//doesnt exist
}
希望这会有所帮助
答案 1 :(得分:1)
集合不是独立于文档创建或删除的。创建文档并将其指定为某个集合的一部分时,如果该集合尚不存在,则会自动创建该集合。同样,当您删除集合中的最后一个文档时,该集合将被自动删除。因此,实际上没有任何情况需要担心是否已创建集合,也没有对创建或删除集合的明确控制。
答案 2 :(得分:1)
通常,如果其中没有文档,则Firestore中的集合会被删除。
但是,在某些情况下,您可能希望保留馆藏修改事件的历史记录,或者说由于某种原因阻止馆藏被删除。
例如,您想知道何时创建集合。通常,如果删除文档,然后再次创建收藏集,则您将不知道初始创建日期。
我可以想到的解决方法是:
使用一个文档初始化您想要的每个集合,该文档专门用于保留有关该集合的一般信息。
这样,即使删除了馆藏中的所有其他文档,您仍将保留馆藏以及一些信息,如果将来需要获取有关馆藏的一些历史信息,这些信息可能会很方便。
因此要知道是否存在不存在的集合,可以运行查询以检查信息文档中的字段(例如CollectionInfo.exists)以了解已经创建了哪些集合。