Firebase 如何在Flatter上检查firestore中是否存在收藏?
我从firestore得到一些数据。有时,当我调用以获取数据时,集合尚未创建。 在调用get请求之前,如何检查集合是否存在Firebase 如何在Flatter上检查firestore中是否存在收藏?,firebase,flutter,dart,google-cloud-firestore,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('messa
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());
}
集合的创建或删除不独立于文档。创建文档并将其指定为某个集合的一部分时,如果该集合不存在,则会自动创建该集合。同样,删除集合中的最后一个文档时,该集合将自动删除。因此,在任何情况下,您都不需要担心集合是否已创建,也不需要明确控制集合的创建或删除 集合的创建或删除不独立于文档。创建文档并将其指定为某个集合的一部分时,如果该集合不存在,则会自动创建该集合。同样,删除集合中的最后一个文档时,该集合将自动删除。因此,在任何情况下,您都不需要担心集合是否已创建,也不需要明确控制集合的创建或删除 如果Firestore中不存在文档,则通常会删除该集合 然而,在某些情况下,您可能希望保留集合修改事件的历史记录,或者说出于某种原因阻止删除集合 或者,例如,您想知道一个集合是何时创建的。通常,如果删除文档,然后再次创建集合,您将不知道初始创建日期 我能想到的解决办法如下: 使用一个文档初始化您想要的每个集合,该文档将专门用于保存有关该集合的常规信息 例如: 这样,即使删除了集合中的所有其他文档,您仍然可以保留集合中的一些信息,如果将来需要获取有关集合的一些历史信息,这些信息可能会很方便
因此,要知道是否存在no集合,您可以运行一个查询,检查信息文档中的字段,例如CollectionInfo.exists,以了解已经创建了哪些集合 如果Firestore中不存在文档,则通常会删除该集合 然而,在某些情况下,您可能希望保留集合修改事件的历史记录,或者说出于某种原因阻止删除集合 或者,例如,您想知道一个集合是何时创建的。通常,如果删除文档,然后再次创建集合,您将不知道初始创建日期 我能想到的解决办法如下: 使用一个文档初始化您想要的每个集合,该文档将专门用于保存有关该集合的常规信息 例如: 这样,即使删除了集合中的所有其他文档,您仍然可以保留集合中的一些信息,如果将来需要获取有关集合的一些历史信息,这些信息可能会很方便 因此,要知道是否存在no集合,您可以运行一个查询,检查信息文档中的字段,例如CollectionInfo.exists,以了解已经创建了哪些集合 我以前发过这个
final snapshot = await firestore.collection(roomName).getDocuments();
if (snapshot.documents.length == 0) {
//doesnt exist
}
希望这有帮助我以前发布过这篇文章
final snapshot = await firestore.collection(roomName).getDocuments();
if (snapshot.documents.length == 0) {
//doesnt exist
}
希望这对您有所帮助您只能通过读取集合中的文档来确定集合是否存在。最便宜的方法是阅读单个文档。你刚才评论了我对这个问题的回答:这个问题和那个问题有何不同?你只能通过阅读一个文档来确定一个集合是否存在。最便宜的方法是阅读单个文档。你刚才评论了我关于几乎完全相同的问题的答案:这个问题与那个问题有何不同?但是,请记住,这会给每个额外的读/写操作带来额外的成本。但是,请记住,这会给每个额外的读/写操作带来额外的成本。