慕尼黑8549860
2023-05-11 10:25:37
var database = firebase.database(); //db is empty.function handler(e, prevChildKey) { console.log(e.val());}database.ref('user').orderByChild('color').startAt('a').on('value', handler);database.ref('user').set({ 'ryan': {color: "a"}, 'john': {color: "b"}, 'kirsty': {color: "c"},});我希望:{ryan: {color: "a"}}被記錄到控制臺。原因是因為我認為startAt匹配值以開頭的鍵"a"。相反,它記錄:{ john: {color: "b"}, kirsty: {color: "c"}, ryan: {color: "a"}}
1 回答

阿波羅的戰車
TA貢獻1862條經驗 獲得超6個贊
Firebase 中的查詢包含兩個步驟:
您指定要排序的每個子節點的值,在您的情況下是 的值
color
。Firebase 讀取節點,并按該值對它們進行排序。然后指定從哪里開始返回結果,即 child
a
。由于您沒有指定結束條件,因此 Firebase 會從它開始的那個節點返回所有子節點。
如果你想實現一個starts with操作,你需要結合startAt()
使用endAt()
:
database.ref('user').orderByChild('color').startAt('a').endAt('a\uf8ff').on('value', handler);
本例中的the\uf8ff
只是字符集末尾足夠遠的字符,結果包括color
值以 開頭的所有 a
節點。
當您對 Firebase 數據庫執行查詢時,可能會有多個結果。所以快照包含這些結果的列表。即使只有一個結果,快照也會包含一個結果的列表。
您的回調將需要處理此列表,通過循環使用DataSnapshot.forEach
來遍歷子項:
function handler(snapshot) {
snapshot.forEach(function(e) {
console.log(e.val());
});
}
database.ref('user').orderByChild('color').startAt('a').on('value', handler);
添加回答
舉報
0/150
提交
取消