这是我在数据库中的数据结构
"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,然后将它们转换为数组,但是你将丢失密钥,我仍然需要它,因为列表是可点击的,所以我可以访问它的详细信息页面。另外我不认为在前端排序是一个好主意。
答案 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
},
...
}