当前位置: 首页 > 知识库问答 >
问题:

Firebase实时数据库等式查询递增键中的子项

岳阳文
2023-03-14

我正在尝试从数据库中获取数据。但是在我更改了我的代码以解决我的反应本机项目的性能问题后,我找不到我想要的查询。交易是我有这种类型的数据结构。它在 /root/news/0/coin_name.0键增加,就像我的每个数据的1,2,3… n。为了更好地理解:

cnh
I
I
--coins
|
|
--news|
      |
      |--0|
          --coin_name='algorand'
          ...
      |--1|
          ...

我想获取coin_name等于的数据,如“algorand”。我尝试了一些查询,但没有一个有效。如果你帮助我,我将不胜感激。

我试过:

useEffect(()=>{
        const fbdb = async () =>{
            await database()
      .ref(newsKey)
      .orderByChild('year')
      .equalTo('2021')
      .once('value')
      .then(snapshot => {
        const data = snapshot.val();
        const formattedResponse=formatMarketData(data,show);
        return setNews(formattedResponse)
      });
      };
    
        fbdb();
       
    },[show,year]);

编辑最后,我将数据从我的excel文件推送到实时数据库,解决了字符串数据的问题,对于年份equalto查询,我应该先解析它到int,在解析年份值为整数之后,这个问题也解决了。

共有3个答案

叶茂才
2023-03-14

在我对网络进行所有研究之后,我得出的结论是,firebase实时数据库API不支持具有未知路径的嵌套查询。在获取所有数据后,我应该使用另一种结构或过滤数据(这对于大型数据集来说是非常低效的)。所以我决定尝试在没有新闻标签的情况下使用火库进行新闻。我会让你知道,如果这种方式可以解决问题。

年嘉禧
2023-03-14
{
  "coins" : [ {
    
  } ],
  "news" : [ {
    "coin_name" : "algorand",
    "event_date" : "2019-06-24",
    "exchange" : "crypto.com",
    "month" : "6",
    "year" : "2019"
  }, {
    "coin_name" : "algorand",
    "event_date" : "2021-01-06",
    "exchange" : "bitmart",
    "month" : "1",
    "year" : "2021"
  },  {
    "coin_name" : "litecoin",
    "event_date" : "2020-12-25",
    "exchange" : "binance qtly",
    "month" : "12",
    "year" : "2020"
  }, {
    "coin_name" : "litecoin",
    "event_date" : "2021-01-04",
    "exchange" : "coinflex",
    "month" : "1",
    "year" : "2021"
  }, 
     {
    "coin_name" : "tron",
    "event_date" : "2020-06-20",
    "exchange" : "resfinex",
    "month" : "6",
    "year" : "2020"
  }, {
    "coin_name" : "tron",
    "event_date" : "2020-07-07",
    "exchange" : "all",
    "month" : "7",
    "year" : "2020"
  }, {
    "coin_name" : "tron",
    "event_date" : "2020-07-10",
    "exchange" : "phemex",
    "month" : "7",
    "year" : "2020"
  }, {
    "coin_name" : "tron",
    "event_date" : "2021-04-21",
    "exchange" : "all",
    "month" : "4",
    "year" : "2021"
  }, {
    "coin_name" : "tron",
    "event_date" : "2021-05-19",
    "exchange" : "phemex",
    "month" : "5",
    "year" : "2021"
  }, {
    "coin_name" : "tron",
    "event_date" : "2021-06-17",
    "exchange" : "bitpanda",
    "month" : "6",
    "year" : "2021"
  } ]
}
公良征
2023-03-14

我想你正在寻找

await database()
  .ref('news')
  .orderByChild('coin_name')
  .equalTo('algorand')

请注意,这些数字顺序键通常是Firebase中的反模式。要了解原因以及推送键的更惯用结构,请阅读最佳实践:Firebase中的数组。

一个工作的例子:https://jsbin.com/focaveq/3/edit?js,console

 类似资料:
  • 我有一个firebase数据库,员工数据的结构如下。我还有一个用户表,它具有'Company ID'属性。每次用户登录时,我都希望获取与用户“公司ID”匹配的所有员工。是否有可能实现这使用firebase数据库规则或我必须写一些查询。

  • 3.移除值事件侦听器和脱机的区别。

  • 我正在尝试检索一些值而不是其他值。事实上,我想通过用户的名字来搜索他们。 我尝试使用和,但找不到正确的解决方案。 如您所见,我还添加了。如果我不添加那个部分,它就不会检索任何东西。我想要的只是从我在TextField中所写的内容开始检索值。

  • 我有一个包含数百个节点对象的数据库,所有节点对象的名称中都带有空格。我有时不得不使用我的笔记本电脑上的控制台进入这些键中的一个来编辑从属值。 自从我上次尝试这样做以来,由于某种原因,而不是键在它自己的页面中作为“某个节点”打开,其下方是适当的键/值,可编辑,它显示为“某个节点”,这导致它无法找到下面的值。 如果我不是“单击”键来编辑它,而是简单地展开键节点,则从属键/值存在,因此数据存在。我的应用

  • firebaseDatabase=firebaseDatabase.getInstandatabaseReference=firebaseDatabase.getReference()Query Query=databaseReference.child(“ticket_detail”).orderbychild(“ticket_no”).limittoLast(1);AddListenerFor

  • 我使用Firebase实时数据库作为后端。我希望每个请求最多增加1个。例如: 这不管用。 在前端,我发送“数据1”。我应该如何创建“.validate”规则?