Firestore удалить документ и все документы, ссылающиеся на него - PullRequest
0 голосов
/ 28 августа 2018

этот вопрос касается 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?

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Вы должны запросить документы, а затем удалить их. Я не использую вложенные коллекции, и я не собираюсь искать, как их запрашивать, но с помощью схемы корневого уровня вы удалили бы сообщение с помощью стандартного удаления из хранилища, ссылаясь на 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() звонки по мере необходимости.

0 голосов
/ 28 августа 2018

Не существует автоматического способа делать то, что вы хотите. Firestore не является реляционной базой данных, поэтому отношения между документами не применяются. В Firestore нет операций соединения.

Вместо этого можно запросить документы для удаления, удалить их все после итерации результатов запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...