Firebase orderByChild()。equalTo()返回Objekt的次数太多

时间:2017-10-18 13:04:12

标签: javascript reactjs google-maps firebase firebase-realtime-database

您好我试图从我的Firebase获取谷歌地图标记的数据。我用equalTo方法尝试了它但似乎工作错了。我确实得到了我想要的数据,但我得到的确与许多孩子都拥有我要求的财产一样频繁。因此,例如,如果我要求道具城市=伦敦,我得到一个与伦敦城市的所有孩子的对象,但我得到这个objekt经常有这个城市的孩子(如10或20倍)这不是很有效(如果我有一天有这个城市有成千上万的道具怎么办?)

componentWillUpdate (){
   const previousMarker = this.state.markers;

   this.Ref.orderByChild('address').equalTo(this.props.city)

      .on('child_added', snap => {
      previousMarker.push({
          lat: snap.node_.children_.root_.right.left.value.children_.root_.left.value.value_,
          lng: snap.node_.children_.root_.right.left.value.children_.root_.value.value_,
          price: snap.node_.children_.root_.value.value_,
          key: snap.key + "_Marker",

        })
        console.log(previousMarker)

      })
 }

1 个答案:

答案 0 :(得分:1)

按照设计,将为每个与您的查询匹配的子项调用child_added事件,请参阅listening for child events的文档。

如果您希望单个事件返回整个数据列表,则应使用value事件侦听器。来自listen for value events documentation

  

value观察者附加到数据列表将返回整个   数据列表作为单个快照,然后您可以循环到   接触个别孩子。

 ref.once('value', function(snapshot) {
     snapshot.forEach(function(childSnapshot) {
         var childKey = childSnapshot.key;
         var childData = childSnapshot.val();
         // ...
      });
});

您也可以像对待儿童活动一样使用on('value', ...)