针对调查应用的 Firestore 数据结构建议
Firestore data structure suggestion for a survey app
这是我当前的数据库结构,我有一个集合存储所有调查问题文档,在每个问题文档下,它有一个 Answers sub-collection 存储所有回答问题的用户。具有挑战性的部分是如何在不查询整个问题集合的情况下随机加载 8 个特定用户未回答的问题?什么是成本最低的方法?任何建议都是有帮助的。谢谢
下面是我的数据库结构:
您应该将用户已回答问题的 ID 存储在用户数据中。然后,您可以使用 where
子句查询与这些 ID 不匹配的足够多的文档。 https://firebase.google.com/docs/firestore/query-data/get-data#get_multiple_documents_from_a_collection
您拥有的最佳选择是将应用程序中的所有问题 ID 存储到数组数据类型的文档中。如果您担心 1 MiB 的限制,那么您应该考虑 sharding the IDs over multiple documents.
每当用户回答 8 个问题时,将这些 ID 添加到用户对象的数组中。
The challenging part is that how do I randomly load 8 questions that are not answered by a specific user, without query the entire question collection?
要加载 8 个随机问题,您只需下载两个数组并从问题 ID 中删除用户已回答的所有 ID。这样,您将只有一组用户未回答的问题 ID。获取其他8个ID,添加到User对象中,依此类推。
另请记住,您还需要保持数据同步,这意味着每次添加新问题时,也要将其添加到数组中。删除操作也一样。
这是我当前的数据库结构,我有一个集合存储所有调查问题文档,在每个问题文档下,它有一个 Answers sub-collection 存储所有回答问题的用户。具有挑战性的部分是如何在不查询整个问题集合的情况下随机加载 8 个特定用户未回答的问题?什么是成本最低的方法?任何建议都是有帮助的。谢谢
下面是我的数据库结构:
您应该将用户已回答问题的 ID 存储在用户数据中。然后,您可以使用 where
子句查询与这些 ID 不匹配的足够多的文档。 https://firebase.google.com/docs/firestore/query-data/get-data#get_multiple_documents_from_a_collection
您拥有的最佳选择是将应用程序中的所有问题 ID 存储到数组数据类型的文档中。如果您担心 1 MiB 的限制,那么您应该考虑 sharding the IDs over multiple documents.
每当用户回答 8 个问题时,将这些 ID 添加到用户对象的数组中。
The challenging part is that how do I randomly load 8 questions that are not answered by a specific user, without query the entire question collection?
要加载 8 个随机问题,您只需下载两个数组并从问题 ID 中删除用户已回答的所有 ID。这样,您将只有一组用户未回答的问题 ID。获取其他8个ID,添加到User对象中,依此类推。
另请记住,您还需要保持数据同步,这意味着每次添加新问题时,也要将其添加到数组中。删除操作也一样。