【问题标题】:Firebase Database: Search for Particular ItemFirebase 数据库:搜索特定项目
【发布时间】:2017-02-10 04:33:09
【问题描述】:

我正在构建一个订购工具。每个订单都有一个id,这是我使用push 方法从Firebase 获得的唯一标识符。我的问题是:假设我在页面中放置了一个标有“订单”的文本字段,旁边有一个标题为“查找”的按钮。

检索(甚至可能构建)该数据的最佳方式是什么?我熟悉 Firebase 数据库的索引。基本上,我想启用搜索特定订单。可能有数千个。以下是正确的吗?

var wantedOrder = firebase.database().ref('orders').equalTo("My Input Text");

  "orders": {
    "abc123456": {
      "name": "My First Fake Order",
      "members": {
        "alovelace": true,
        "ghopper": true,
        "eclarke": true
      },
    "abc123457": {
      "name": "My Second Fake Order",
      "members": {
        "alovelace": true,
        "ghopper": true,
        "eclarke": true
      }
    },
    ...
  }

Firebase 规则

{
  "rules": {
    "orders": {
      ".indexOn": ["name"]
    }
  }
}

【问题讨论】:

  • 不能直接使用equalto.... 需要先apply和orderBy*()方法

标签: javascript firebase firebase-realtime-database


【解决方案1】:

equalTo()startAt()endAt() 之前需要一个 orderBy*() 类型的函数。

在你的特殊情况下,我会使用

var wantedOrder = firebase.database().ref('orders').orderByChild('name').equalTo('yourText').on(listener you want.....)

这将返回您搜索的完全匹配......

如果您想要更灵活的方式,请使用startAt()endAt()

【讨论】:

  • 抱歉打了电话...无法帮助缩进
  • 我不知道是否需要在 firebase 规则中添加 $order... 如果它不起作用,我会回过头来。 TY
  • 您的规则很好...您调用的方法是错误的...在 firebase 文档中查看高级查询,它会对您有所帮助。
【解决方案2】:

我可以建议你两种方法来实现你正在寻找的东西。

  1. (如果数据量大,效率不高)可以通过“Orders”节点的ValueEventListener获取全部数据,然后遍历每组数据进行搜索关键字。

  2. 看看这个链接,他们有与你相似的数据集。 Querying firebase through substring

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多