firebase - 使用 Firestore 进行过滤和排序

标签 firebase google-cloud-firestore

我正在 firestore 中构建一个任务管理应用程序。 任务可以有多个成员标签。由于我总是对用户的内容进行排序和显示(基于截止日期、优先级等),并且由于带有列表和复合索引的 firestore 的限制,我最终将数据存储在以下结构中。

projects:

.....   
    101: {
        name: 'task1', 
        members: {201: true, 202: true, ......}, 
        tags:{'tag1':true, 'tag2':true, 'tag3':true,....} 
      },

    102: {
        name: 'task2', 
        members: {201: true, 202: true, ......}, 
        tags:{'tag1':true, 'tag2':true, 'tag3':true,....}
      },

    103: {
        name: 'task3', 
        members: {201: true, 202: true, ......}, 
        tags:{'tag1':true, 'tag2':true, 'tag3':true,....} 
      }

.....

现在,由于复合索引必须是手动的,我最终实现了反向查找:

users:
.....

201: {
        name: 'John',
        tasks: 
                501: {taskId: 601, priority: high, ...... },
                502: {taskId: 601, priority: high, ...... },
                503: {taskId: 601, priority: high, ...... },            
     }

202: {
        name: 'Doe',
        tasks: 
                504: {taskId: 601, priority: high, ...... },
                505: {taskId: 601, priority: high, ...... },
                506: {taskId: 601, priority: high, ...... },            
     }

......

此时,如果您也必须过滤标签,在用户下,我将必须为每个标签添加子集合并在它们下存储任务。这将为每项任务创建大量文档。例如,如果您的一项任务包含 3 个成员和 3 个标签,则此设置将为一项任务创建 12 个文档。我所做的任何更改都将涉及 12 次写入。

我在这里缺少什么?这是我存储数据的方式吗?还是与firestore本身能力不足有关?

最佳答案

  1. Firestore 在查询方面确实存在限制

  2. 我看到的是,您正在尝试标准化数据,如果您使用 RDBMS,这是一个很好的方法。在 Firestore 中,通常建议尽可能对数据进行非规范化。但这又是一个权衡,您的读取速度将很快且易于查询,但写入速度可能会很慢,因为您可能必须在多个位置写入数据。

  3. 反规范化 - 简而言之,它具有扁平的数据结构

读得好 - https://angularfirebase.com/lessons/firestore-nosql-data-modeling-by-example/

关于firebase - 使用 Firestore 进行过滤和排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51558035/

相关文章:

javascript - Vue 警告我无法在未定义、空或原始值 : null 上设置 react 属性

javascript - polymer 自定义元素 javascript 与 firebase 的数据绑定(bind)错误

javascript - 尝试使用批处理方法删除多路径firestore现场文档

firebase - 我无法从 firestore "Instance of ' Future<dynamic >'"获取数据

javascript - snapshot.docChanges() 在 Firebase Firestore 中不起作用

swift - 尝试使用完成处理程序从 google firebase 获取数据时遇到问题

android - 从 Firebase 数据创建一个 ArrayList

flutter - 如何在 Flutter 中使用 Firebase 在我的游戏中创建虚拟硬币系统?

android - 使用 Android 的 Algolia 和 Cloud Firestore?

android - 一次查询多个 ID 的 Google Firestore