如何对firebase实时数据库中的数据进行排序?

问题描述 投票:0回答:1

我真的很难弄清楚如何在实时数据库中对数据进行排序。我不断参考他们的文档并应用所描述的步骤,但在数据排序方面似乎没有发生任何事情。我相信它应该与过滤一样工作,过滤工作正常,但没有积极的结果。

这是我的代码[React Native]:

useEffect(() => {
    onValue(
      // Order by the "createAt" field
      query(
        ref(db, "deals/"),
        orderByChild("createAt"),
        startAt("2023-12-31 23:59:59")
      ),
      (snapshot) => {
        setData(snapshot.val());
      },
      (err) => {
        console.error(err);
      }
    );
}, []);

我还尝试过应用其他排序函数,例如 orderByChild()、orderByKey() 和 orderByValue()。此外,我尝试将该字段更改为“数字”和“字符串”类型,但仍然没有找到有效的解决方案。

javascript react-native firebase-realtime-database
1个回答
0
投票

首先:您在

createAt
中有一个拼写错误(在
d
之后缺少
create
),因此请确保这实际上是该属性在数据库中的名称。

如果匹配,数据库实际上将返回一个快照,其中子节点的顺序正确。但是您的代码随后会调用

snapshot.val()
,它将数据转换为 JSON 对象 - 并且 JSON 中的子节点根据定义是无序的。

要解决此问题,请使用快照的内置

forEach
操作按顺序处理子节点 - 然后将其作为数组传递到您的 UI:

(snapshot) => {
  let results = [];
  snapshot.forEach((child) => { 
    results.push({ 
      id: child.key,
      ...child.val()
    ); 
  }
  setData(results);
},

您当然还必须更新呈现 UI 的代码以处理数组。

© www.soinside.com 2019 - 2024. All rights reserved.