【问题标题】:How to query data in a flattened Firebase structure?如何在扁平化的 Firebase 结构中查询数据?
【发布时间】:2016-04-05 22:13:37
【问题描述】:

我正在尝试使用 Firebase 为房地产中介创建数据库。我决定创建一个扁平化数据库,但我需要一些帮助.. (我正在使用 AngularJS)

这是一个数据库示例:

  "city" : {
    "Montpellier" : {
      "xx2" : true,
      "xx3" : true
    },
    "Teyran" : {
      "xx1" : true
    }
  },
  "owners" : {
    "xxx1" : {
      "lastname" : "Duparc",
      "name" : "Jean"
    },
    "xxx2" : {
      "lastname" : "Dupont",
      "name" : "Henry"
    },
    "xxx3" : {
      "lastname" : "Wood",
      "name" : "John"
    }
  },
  "prices" : {
    "xxx1" : 405000,
    "xxx2" : 100000,
    "xxx3" : 122000
  },
  "type" : {
    "appartment" : {
      "xx2" : true
    },
    "home" : {
      "xx1" : true
    },
    "land" : {
      "xx3" : true
    }
  }

XX1, XX2, XX3 是每个产品的参考。

在这个数据库中,我们看到在节点类型中,有:

  • 一个家(房子):XX1
  • 一间公寓:XX2
  • 一块地:XX3

问题是:如果我想列出每个产品的类型:公寓怎么办?

那么如果我能得到每个 Apartment 的 ref,我该如何构造这个产品的细节呢?

我的意思是如何获取业主的姓名、姓氏、价格、城市等?

【问题讨论】:

    标签: angularjs firebase firebase-realtime-database angularfire nosql


    【解决方案1】:

    您在数据结构中显示的是索引。

    您通常还会有一个包含每个属性的主副本的列表:

    "properties": {
      "xx1": {
        "city": "Teyran",
        "owner": "Jean Duparc",
        "price": 405000,
        "type": "home",
      },
      "xx2": {
        "city": "Montpellier",
        "owner": "Henry Dupont",
        "price": 100000,
        "type": "apartment",
      },
      "xx3": {
        "city": "Montpellier",
        "owner": "John Wood",
        "price": 122000,
        "type": "land",
      }
    }
    

    现在有了我们的索引和上述结构,您可以通过以下方式查找公寓:

    ref.child('type').child('apartment').on('value', function(keys) {
      keys.forEach(function(keySnapshot) {
        ref.child('properties').child(keySnapshot.ref().key()).once('value', function(propertySnapshot) {
          console.log(propertySnapshot.val());
        });
      });
    })
    

    要更新属性,您可以使用multi-location update。例如更新xx1的所有者:

    var updates = {};
    updates['/properties/xx1'] = property;
    updates['/owners/Jean Duparc/'+id] = null;
    updates['/owners/Runfast Webmaster/'+id] = true;
    ref.update(updates);
    

    【讨论】:

    • Franck,我收到此错误:TypeError: keySnapshot.key is not a function。 (在'keySnapshot.key()'中,'keySnapshot.key'未定义)
    • 错字:keySnapshot().ref().key()。请注意,Firebase 也有相当不错的 reference documentation 来帮助您处理这类事情。
    • 我已经查看了参考文档。但我没有发现任何关于错误的信息:TypeError: keySnapshot is not a function。 (在 'keySnapshot()' 中,'keySnapshot' 是 R 的一个实例)
    • 弗兰克,我有一个类似的扁平化数据结构 {key1:true,key2:true} 我正在寻找最有效的方法来调用返回与键相关的对象集的查询从 Swift 内部。随着新版本的发布,这是否发生了重大变化?任何帮助表示赞赏。
    猜你喜欢
    • 2017-11-16
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-26
    相关资源
    最近更新 更多