Firebase Firestore删除文档及其所有引用文档

Firebase Firestore删除文档及其所有引用文档,firebase,dart,flutter,google-cloud-firestore,Firebase,Dart,Flutter,Google Cloud Firestore,此问题与Firebase(+颤振)有关 是否可以删除一个文档以及引用它的所有文档 假设我有这样一个结构: -users (collection) - name - bookmarks ((sub)collection) - postId -post (collection) - userId - name - ... return firestore .collection("posts") .orderBy("createdAt")

此问题与Firebase(+颤振)有关

是否可以删除一个文档以及引用它的所有文档

假设我有这样一个结构:

-users (collection)
  - name
  - bookmarks ((sub)collection)
    - postId
-post (collection)
  - userId
  - name
  - ...
return firestore
        .collection("posts")
        .orderBy("createdAt")
        .snapshots(); // I want to join the userInformation
现在,如果我删除一篇文章,我想删除引用该文章的所有书签。(来自所有用户)。是否有一种自动方式(来自RDBMS)

另一个问题: 我如何查询所有的帖子和“加入”用户信息

大概是这样的:

-users (collection)
  - name
  - bookmarks ((sub)collection)
    - postId
-post (collection)
  - userId
  - name
  - ...
return firestore
        .collection("posts")
        .orderBy("createdAt")
        .snapshots(); // I want to join the userInformation
那么,这些嵌套查询是否达到了api限制


提前感谢

没有自动的方法来做你想做的事情。Firestore不是关系数据库,因此文档之间的关系不强制执行。Firestore中没有“加入”操作


您可以改为查询要删除的文档,在迭代查询结果后将其全部删除。

没有自动方法来执行您想要的操作。Firestore不是关系数据库,因此文档之间的关系不强制执行。Firestore中没有“加入”操作


您可以查询要删除的文档,在迭代查询结果后将其全部删除。

您必须查询文档,然后批量删除它们。我不使用子集合,也不打算查找如何查询它们,但使用根级架构,您可以使用标准的firestore delete来删除帖子,并引用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个批次:


因此,您必须根据需要拆分批处理.commit()调用。

您必须查询文档,然后批量删除它们。我不使用子集合,也不打算查找如何查询它们,但使用根级架构,您可以使用标准的firestore delete来删除帖子,并引用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个批次:


因此,您必须根据需要拆分批处理.commit()调用。

因此,假设我有10000个用户及其书签。我必须检查所有这些,检查id是否=我的帖子id并删除它?如果是这样,我会将书签提升到根级别,以便于查询。但问题仍然是,我如何添加必要的信息。你有没有一个伪代码示例,如何将用户信息添加到返回的帖子中?我没有示例。我建议你自己尝试一下,如果你有问题,可以问另一个问题。所以假设我有10000个用户使用他们的书签。我必须检查所有这些,检查id是否=我的帖子id并删除它?如果是这样,我会将书签提升到根级别,以便于查询。但问题仍然是,我如何添加必要的信息。你有没有一个伪代码示例,如何将用户信息添加到返回的帖子中?我没有示例。我建议你自己尝试一下,如果你有问题的话,再问另一个问题。