亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Firebase 的實時數據庫的“startAt”未按預期工作

Firebase 的實時數據庫的“startAt”未按預期工作

慕尼黑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 中的查詢包含兩個步驟:

  1. 您指定要排序的每個子節點的值,在您的情況下是 的值color。Firebase 讀取節點,并按該值對它們進行排序。

  2. 然后指定從哪里開始返回結果,即 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);


查看完整回答
反對 回復 2023-05-11
  • 1 回答
  • 0 關注
  • 168 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號