解決方案: 正如弗蘭克已經指出,我必須創建一個單獨的領域,這種排序工作。使用Firebase orderByChild(1)並按小孩篩選任何解決方案?
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);
});
}
我測試過下面這樣的:作爲建議,我創建了一個申請「的SortField」它結合了
"clubKey" + "_" + "startDate"
要修改我現有的數據集,我做了一個快速的Java腳本函數這樣代碼:
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排序過濾的結果。
據我所知,這是行不通的。
我通過Firebase UI在Android上使用Firebase。
任何想法如何實現?我不想重組數據或進一步複製它。
希望有一種方法,也許強制已經存儲的訂單?
你或者可以對數據進行排序的客戶端或創建結合clubKey'的'的值的屬性和'startDate'。例如:''「clubKey_startDate」:「manualClubKey-1_2011-11-27」'。請參閱http://stackoverflow.com/questions/26700924/query-based-on-multiple-where-clauses-in-firebase –
謝謝,但我沒有看到,我如何獲得所有「manualClubKey-1」與任何startDate ,但由startDate命令。 或者有一個使用startAt和endAt的技巧。在鏈接給出我沒有看到我的問題的解決方案,看起來相似。 –
你的問題似乎是如何通過'startDate'命令獲得'club ==「manualClubKey-1的用戶。你需要爲它創建一個複合屬性,然後'ref.orderByChild(「clubKey_startDate」)。startAt(「manualClubKey-1」)。endAt(「manualClubKey-2」)' –