Firebase侦听器,用于特定子值,尚未创建的子级

时间:2017-07-11 14:37:00

标签: ios swift firebase firebase-realtime-database

我有这样的数据结构:

friend_requests_sent:

    userId1:
        sub_userId1:
            status: "request_sent"
        sub_userId2:
            status: "request_sent"
        sub_userId3:
            status: "request_failed"

    userId2:
        sub_userId1:
            status: "request_sent"
        sub_userId2:
            status: "request_failed"
        sub_userId3:
            status: "request_sent"

每个sub_userId都是在某个时间点创建的,但我想设置一个数据库侦听器,只有当status的值设置为request_sent时才会触发该数据库侦听器sub_userId

也就是说,我正在尝试在不存在的(尚)路径/friend_requests_sent/userId1/sub_userId4/status上创建一个观察者,该路径将检查它是否确实request_sent在创建它时和之后status值会发生变化。

如何获取前者的快照?感觉就像我在火力架查询系统中迷路了。

提前致谢!

2 个答案:

答案 0 :(得分:0)

friend_requests_sent:
    userId1:
        requests:
          sub_userId1: "insertstatushere"
          sub_userId2: "insertstatushere"
          //continue

我认为这会好很多。添加仅为该路径添加,删除和更改的子项(userIDHere / requests /)。这样你就可以检查和处理所有事情。

答案 1 :(得分:0)

以下是我建议的代码:

firebase.database().ref("friend_requests_sent").once('value', function(snap){

     snap.forEach(function(child){
        //For each userID below query looks for subusers whose status are 'request_sent'

        child.ref.orderByChild('status').equalTo('request_sent').on('child_added', function(grandChild){
          //grandChild.val() is the sub-user of child.val()
          //grandChild.val().status is equal to 'request_sent'
          alert(grandChild.val().status);
        });
     });

)};

希望有效!