如何在拼合的Firebase结构中查询数据?

时间:2016-04-05 22:13:37

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

我正在尝试使用Firebase为房地产代理商创建数据库。我决定创建一个flatten数据库,但我需要一些帮助.. (我使用的是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是每种产品的参考号。

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

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

问题是:如果我想列出每种产品的类型如何:公寓?

然后,如果我能够获得每间公寓的参考,我该如何构建该产品的详细信息?

我的意思是如何获得所有者的姓名,姓名,价格,城市等?

1 个答案:

答案 0 :(得分: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);