解决方案: 正如弗兰克已经说过的那样,我必须创建一个单独的文件来进行这种排序。正如所建议的,我创建了一个结合
的字段“sortField”"clubKey" + "_" + "startDate"
为了修改我现有的数据集,我做了一个像这样的快速java脚本函数:
function createTestDataSet(){
evd = dbAllEventsListRef;
evd.on('child_added', function(snap, previous){
console.log(snap.val());
data = snap.val();
data.sortField = data.clubKey + "_" + data.startDate;
testDiv = document.getElementById("divCarSummary");
testDiv.innerHTML = testDiv.innerHTML + "<br/>"+data.sortField;
evd.child(snap.key).set(data);
});
}
我使用以下代码对此进行了测试:
function testSort(){
key = "manualClubKey-1";
testEvents = dbTesting.child('eventList').orderByChild("sortField").startAt(key+"_").endAt(key+"a");
testEvents.on('child_added', function(snap, previous){
data = snap.val();
testDiv = document.getElementById("divCarSummary");
testDiv.innerHTML = testDiv.innerHTML + "<br/>"+data.startDate+", "+data.name+", "+snap.key+", "+data.clubKey;
console.log(snap.val());
});
}
棘手的部分是,“endAt”手册指出:
The ending point is inclusive, so children with exactly the specified value will be included in the query
但这似乎不是真的。 如果我为startAt()和endAt()赋予相同的值,我得不到任何结果。 所以我修改了查询,我找了“clubKey”+分隔符。对于分隔符,我在“_”后面给了一个字符。因此它就像一个魅力。
我修改了我的android代码,所以每次startDate或者clubKey写入时,我都会更新“sortFiled”,小改动,就像魅力一样。
原始问题 我有一些事件数据。 样本数据:
{
"modeltruckerManualEventID-96" : {
"canceled" : false,
"clubKey" : "manualClubKey-1",
"endTime" : "17:00:00",
"eventOpenForWeightData" : false,
"link" : "",
"locationID" : "manualLocationID-4",
"name" : "Fahrtag TuHaKi",
"startDate" : "2012-06-17",
"startTime" : "10:00:00"
},
"modeltruckerManualEventID-97" : {
"canceled" : false,
"clubKey" : "manualClubKey-2",
"endTime" : "17:00:00",
"eventOpenForWeightData" : false,
"link" : "",
"locationID" : "manualLocationID-4",
"name" : "Fahrtag TuHaKi",
"startDate" : "2012-06-17",
"startTime" : "10:00:00"
},
"modeltruckerManualEventID-98" : {
"canceled" : false,
"clubKey" : "manualClubKey-2",
"endTime" : "16:00:00",
"eventOpenForWeightData" : false,
"link" : "",
"locationID" : "manualLocationID-4",
"name" : "Fahrtag TuHaKi",
"startDate" : "2012-03-11",
"startTime" : "10:00:00"
},
"modeltruckerManualEventID-99" : {
"canceled" : false,
"clubKey" : "manualClubKey-1",
"endTime" : "16:00:00",
"eventOpenForWeightData" : false,
"link" : "",
"locationID" : "manualLocationID-4",
"name" : "Fahrtag TuHaKi",
"startDate" : "2011-11-27",
"startTime" : "10:00:00"
}
}
我现在想要过滤,所以我只从一个“clubKey”获取事件 我可以用它来实现:
.orderByChild("clubKey").equalTo("manualClubKey-1")
工作正常。
但有什么办法,我可以通过孩子“startDate”来订购结果吗?
所以我想最终通过startDate排序过滤结果。
据我所知,这不起作用。
我在Android上使用Firebase和Firebase用户界面。
任何想法如何实现?
我不想重组数据或进一步复制数据。
希望有办法,也许强制已经存储的订单?
答案 0 :(得分:0)
如果您想订购BiChild(特定日期),则无法重组数据。
但是,假设您想获取最新添加的节点,只需使用limitToLast(numberOfChildren)