按深子的值查询数据

时间:2016-08-11 02:31:12

标签: swift firebase firebase-realtime-database

我有这样的数据结构:

groups
  -KOrPKM2QUzuMnMlHfJu
    name: "Testgroup 1"
    members
      0: 123456789
      1: 987654321

  -KOrPKM2QUzuMnMFGfXa
    name: "Testgroup 2"
    members
      0: 123456789

未定义成员数。 如何让其中一个成员为123456789的每个小组?

此问题与this不同,因为在另一个问题中,要检查的值的键实际上是已知的。

2 个答案:

答案 0 :(得分:0)

使用push时会生成唯一ID,要检索该节点下的值,您可以使用child_added

firebase.database().ref('groups').on('child_added', snap => {
  firebase.database().ref('groups/'+snap.key+'/members').on('child_added', childSnapshot => {
    if(childSnapshot.val() == '123456789') {
      console.log('123456789 found in ' + snap.val().name);
    }
  });
});

上述代码会向child_added添加groups听众,以便在groups下找到现有子项或添加新子项时,它会触发child_added ,现在snap.key包含您想要的,唯一生成的ID,用于比较存储在members中的值,另一个child_added侦听器设置在members上,它返回存储的所有值在0,1 ...

之下

现在childSnapshot.val()包含您要比较的值,一个简单的IF语句就足够了,如果找到匹配项,您只需使用snap.val().name打印组名称;

答案 1 :(得分:0)

我创建了NSObject类并将其命名为FBNSArrayDB,在其中我创建了firebase ID,在您的情况下它将是:

<form>
  <input type="radio" name="gender" value="general" checked> General<br>
  <input type="radio" name="gender" value="medium"> Medium<br>
  <input type="radio" name="gender" value="high"> High
</form>

然后在你的UIViewController中执行此操作

   var name: NSString?
    var members: NSString?
    var 0: NSString?
var 1: NSString?

在func里面

var fbarray = [FBNSArrayDB]()//at the top