【问题标题】:Firebase retrieve data from realtime databaseFirebase 从实时数据库中检索数据
【发布时间】:2019-04-16 02:18:47
【问题描述】:

在我的 ionic 应用程序中,我使用 firebase 来检索所有已注册的驱动程序及其数据。我的架构看起来像这样;

ehara
    Driver
        fjk59KJjkfkjflhghk
            driverId: 1
            location
                 0: 9.086333699999999
                 1: 7.459455999999999

我的问题是这样的;如果我只知道司机的 driverId,我如何查询数据库以获取司机的位置?

【问题讨论】:

  • 试试this.afs.collection('Driver', ref => ref.where('driverId', '==', _id));并且也使用谷歌,因为这是非常基本的。
  • @Swoox:我的感觉是 OP 使用实时数据库,我为此编写了下面的等效查询(和更好的方法)。
  • 好吧,如果那是真的,他最好尽可能地转换。
  • 谢谢大家,是的,我使用实时数据库,这是项目的要求

标签: angular typescript firebase ionic3


【解决方案1】:

您必须执行查询才能找到具有给定 ID 的驱动程序:

firebase.database().ref('Driver')
  .orderByChid('driverId')
  .equalTo('1')
  .once('value')
  .then(function(snapshot) {
    snapshot.forEach(function(driverSnapshot) {
      console.log(driverSnapshot.val());
    });
  })

一个查询可以匹配多个子节点,因此代码需要对可能的多个结果使用snapshot.forEach

由于在您的情况下听起来 ID 已经是唯一的,因此请考虑使用该 ID 作为您的 Driver 节点中的键。

Driver
    id1
        location
             0: 9.086333699999999
             1: 7.459455999999999

在这种情况下,读取变成了简单的查找(而不是查询):

firebase.database().ref('Driver')
  .child('id1')
  .once('value')
  .then(function(snapshot) {
    console.log(snapshot.val());
  })

由于在这个结构中只能有一个具有给定键的节点,我们也不再需要forEach 循环。

【讨论】:

    猜你喜欢
    • 2020-12-09
    • 2021-02-06
    • 2017-10-06
    • 1970-01-01
    • 2018-09-11
    • 2019-02-04
    • 2019-05-30
    • 2019-11-28
    • 1970-01-01
    相关资源
    最近更新 更多