【问题标题】:Sort Firestore documents by a user defined hierarchy?按用户定义的层次结构对 Firestore 文档进行排序?
【发布时间】:2019-10-14 10:36:28
【问题描述】:

我有一个 Firestore 数据库,它有一些文档,包括“位置”字段。 这个“职位”字段可以取值“高级讲师”、“系主任”、“讲师”。 我想对这个集合进行排序,这样,包含“部门主管”作为职位的文件应该排在最前面,包含“高级讲师”作为职位的文件应该在下一个,包含“讲师”作为职位的文件应该来到底部。

我不能只按字母顺序排序。 (“H”、“S”、“L”)

如何在 Firestore 中执行此操作?

【问题讨论】:

  • 我不能只按字母顺序排序。我有自己的层次结构。
  • 这应该被解决一些文件包括...所以有些文件有那个字段而有些没有...你想要什么那些根本没有这个领域的人怎么办?

标签: firebase google-cloud-firestore


【解决方案1】:

一种解决方案是创建一个专用于特定排序的额外字段,例如,positionSorting

在 NoSQL 数据库世界中,您应该毫不犹豫地添加新字段以简化查询(或使查询成为可能)。

因此,例如,如果您保存一个以Head of department 作为位置值的文档,则该字段的值为1,如果它是Senior lecturer,则为2,等等。

然后您只需按如下方式查询您的集合:

users.orderBy("positionSorting").get()
  .then(function(querySnapshot) {
     querySnapshot.forEach(function(doc) {
        console.log(doc.id, " => ", doc.data());
     });
  });

【讨论】:

    【解决方案2】:

    如果 Renaud 的方法(使用排序顺序添加显式字段)不适用于您的用例,我通常会在现有的 position 字段值前面加上排序顺序。使他们成为:

    "1 - Head of department"
    "2 - Senior Lecturer"
    "3 - Lecturer"
    

    这样您可以只对position 字段进行排序并以正确的顺序排列它们。如果您不想向用户显示这些数字前缀,则可以将它们隐藏在您的 UI 代码中。

    杰伊编辑

    上面唯一的潜在问题是如果添加了更多职位,例如职位10 - 助理的助理 将排在1 - 部门主管 之后。如果您只有 10 个职位级别 (0-9),这不是问题

    您可以通过填充位置来解决此问题,使它们都具有相同的位数;

    001 - Head of Dept
    002 - Senior Lecturer
    .
    .
    .
    010 - Assistant's Assistant
    

    【讨论】:

    • 稍作修改,可能有助于未来的 Firestore 结构规划。
    • 嘿,杰。感谢那。请注意,这通常应该是评论,而不是编辑。 ;-)
    • 随意删除我添加的内容,因为我认为它会改善答案并且很难作为评论阅读。
    猜你喜欢
    • 1970-01-01
    • 2022-01-08
    • 2020-12-25
    • 2016-05-21
    • 2013-09-16
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    相关资源
    最近更新 更多