如何在扑火的Firestore中检查集合是否存在?

时间:2019-12-06 00:53:47

标签: firebase flutter dart google-cloud-firestore

我从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());
  }

3 个答案:

答案 0 :(得分:2)

我之前曾发布过

 final snapshot = await firestore.collection(roomName).getDocuments();
 if (snapshot.documents.length == 0) {
 //doesnt exist
 }

希望这会有所帮助

答案 1 :(得分:1)

集合不是独立于文档创建或删除的。创建文档并将其指定为某个集合的一部分时,如果该集合尚不存在,则会自动创建该集合。同样,当您删除集合中的最后一个文档时,该集合将被自动删除。因此,实际上没有任何情况需要担心是否已创建集合,也没有对创建或删除集合的明确控制。

答案 2 :(得分:1)

通常,如果其中没有文档,则Firestore中的集合会被删除。

但是,在某些情况下,您可能希望保留馆藏修改事件的历史记录,或者说由于某种原因阻止馆藏被删除。

例如,您想知道何时创建集合。通常,如果删除文档,然后再次创建收藏集,则您将不知道初始创建日期。

  

我可以想到的解决方法是:

使用一个文档初始化您想要的每个集合,该文档专门用于保留有关该集合的一般信息。

例如enter image description here

这样,即使删除了馆藏中的所有其他文档,您仍将保留馆藏以及一些信息,如果将来需要获取有关馆藏的一些历史信息,这些信息可能会很方便。

因此要知道是否存在不存在的集合,可以运行查询以检查信息文档中的字段(例如CollectionInfo.exists)以了解已经创建了哪些集合。