这个问题是关于Firebase(+ Flutter)
是否可以删除文档以及引用该文档的所有文档?
假设我具有这样的结构:
-users (collection)
- name
- bookmarks ((sub)collection)
- postId
-post (collection)
- userId
- name
- ...
现在,如果我删除帖子,我想删除所有引用该帖子的书签。 (来自所有用户)。是否有自动方式(来自RDBMS)。
另一个问题: 如何查询所有帖子并“加入”用户信息。
类似这样的东西:
return firestore
.collection("posts")
.orderBy("createdAt")
.snapshots(); // I want to join the userInformation
然后这些嵌套查询又计入api限制了吗?
预先感谢
答案 0 :(得分:2)
没有自动方法可以执行您想要的操作。 Firestore不是关系数据库,因此不会强制执行文档之间的关系。 Firestore中没有“加入”操作。
您可以查询要删除的文档,然后在重复查询结果后将其全部删除。
答案 1 :(得分:1)
您必须查询文档,然后批量删除它们。我不使用子集合,并且我不会查找如何查询它们,但是使用根级别架构,您可以使用标准的Firestore删除来删除该帖子,并引用documentID。假设documentID与您的“ postID”字段相同(如果不是,则重构您的架构),然后:
final WriteBatch _batch = Firestore.instance.batch();
QuerySnapshot _query = await dbUsers.where('postId', isEqualTo: thatDocumentID).getDocuments();
_query.documents.forEach((doc) {
_batch.delete(dbUsers.document(doc.documentID));
});
await _batch.commit();
请注意,一次只能进行500次批处理:
https://firebase.google.com/docs/firestore/manage-data/transactions
所以您必须根据需要拆分_batch.commit()
通话。