Firebase iOS-.queryOrdered()。queryEqual(toValue:和child()。observeSingleEvent

时间:2018-07-22 22:39:59

标签: ios swift firebase firebase-realtime-database

在Firebase中,搜索用户名(或与此相关的任何搜索)时,两者之间有什么区别 .queryOrdered().queryEqual(toValue:child().observeSingleEvent(

我看了下面@Frank van Puffelen的回答和评论

他在these comments中说:

reference.child("usernames").child(usernameYourSearchingFor).observeSingleEvent(of: .value, with: { (snapshot) in

    if snapshot.exists() { ... } else { ... }
})

但是在this answer中,他回答:

ref.child("users").queryOrdered(byChild:"username").queryEqual(toValue: usernameYourSearchingFor).observeSingleEvent(of: .value, with: { snapshot in

    if snapshot.exists() { ... } else { ... }
})

使用这两种方法中的任何一种搜索数据库时,速度和效率之间是否存在差异,还是仅使用两种不同的方法来实现相同的精确目标?

1 个答案:

答案 0 :(得分:1)

基本上,这些操作用于两个不同的数据结构。

在第一个中,您将具有与此类似的数据结构:

{
  "usernames": {
    "usernameYourSearchingFor": {
      // some data
    },
    "otherUsername": {
      // different data
    }
  }
}

如您所见,您要搜索的用户名是“用户名”节点下的键。您可以通过调用child()函数直接访问它。 (然后附加了一个事件观察器)


现在在第二个结构中:

{
  "users": {
    "user1": {
      "username": "usernameYourSearchingFor",
      "email": "user1@email.com"
    },
    "user2": {
      "username": "otherUsername",
      "email": "user2@email.com"
    }
  }
}

用户名实际上是属于User对象的属性。无法直接访问它,因此需要query“用户”节点才能找到要搜索的用户名,因此需要.queryOrdered(byChild:"username").queryEqual(toValue: usernameYourSearchingFor)