使用变量键

时间:2017-02-06 10:52:59

标签: angularjs sorting firebase firebase-realtime-database

这是我在数据库中的数据结构

"2017" : {
    "metadata" : {
      "February" : {
        "-Kc3BF0V1iLgtnI65LuR" : {
          "date" : "2017-02-04T13:36:38.311Z",
          "price" : 80
        },
        "-Kc3BF0V1xxfrtnI65OlS" : {
          "date" : "2017-02-11T13:36:38.311Z",
          "price" : 70
        },
        "-Kc3BF0V1xxfrtnIOZozp" : {
          "date" : "2017-02-03T13:36:38.311Z",
          "price" : 90
        }
      },
      "January" : {
        "-Kc3E5bpxpo3RpSHH3fn" : {
          "date" : "2017-01-01T13:50:12.264Z",
          "price" : 45
        },
        ...
      }
    }
  }

我正在我的离子应用程序列表中显示此数据,如此

February
 + 2017-02-04
 + 2017-02-11
 + 2017-02-03
January
 + 2017-01-01

现在我想在几个月内对数据进行排序,因此2月份的数据将变为

February
 + 2017-02-03
 + 2017-02-04
 + 2017-02-11

read in the firebase blog他们已添加了一项功能,您可以通过深层路径订购查询 但是,当你有一个动态密钥时,我找不到你如何查询它,在我的例子中,月份是动态密钥。因为这几个月的每个孩子都需要按日期排序。

我正在使用此代码段

从firebase中检索数据
 var dbRef = firebase.database().ref(year +  '/metadata/').orderByChild('date'); //How to order by date if my month is variable?
 return firebaseObject(dbRef); 

我也尝试使用orderBy过滤器以角度排序,但这不起作用,因为它需要是一个数组。我找到了blog,然后将它们转换为数组,但是你将丢失密钥,我仍然需要它,因为列表是可点击的,所以我可以访问它的详细信息页面。另外我不认为在前端排序是一个好主意。

1 个答案:

答案 0 :(得分:0)

Firebase数据库查询只能包含一个动态路径:直接位于您查询位置下的子项。虽然orderByChild()可以获取要对数据进行排序的属性的路径,但该路径必须是静态的。

这意味着如果您想按日期查询所有月份的元数据,则应保留所有月份的元数据列表:

"metadataList" : {
    "-Kc3BF0V1iLgtnI65LuR" : {
      "date" : "2017-02-04T13:36:38.311Z",
      "price" : 80
    },
    "-Kc3BF0V1xxfrtnI65OlS" : {
      "date" : "2017-02-11T13:36:38.311Z",
      "price" : 70
    },
    "-Kc3BF0V1xxfrtnIOZozp" : {
      "date" : "2017-02-03T13:36:38.311Z",
      "price" : 90
    }
    "-Kc3E5bpxpo3RpSHH3fn" : {
      "date" : "2017-01-01T13:50:12.264Z",
      "price" : 45
    },
    ...
}