在Firebase中搜索用户名(或与此相关的任何搜索)时
.queryOrdered().queryEqual(toValue:child().observeSingleEvent(
我看了下面来自@Frank van Puffelen的答案和评论
他说要用:

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

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

但在these comments中,他回答说:
ref.child("users").queryOrdered(byChild:"username").queryEqual(toValue: usernameYourSearchingFor).observeSingleEvent(of: .value, with: { snapshot in

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

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

最佳答案

基本上,这些操作是针对两种不同的数据结构的。
在第一个示例中,您将拥有类似于以下内容的数据结构:

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

如您所见,您正在搜索的用户名是“usernames”节点下的一个键。您可以通过调用child()函数直接访问它。(然后附加一个事件观察者)
现在在第二个结构中:
{
  "users": {
    "user1": {
      "username": "usernameYourSearchingFor",
      "email": "[email protected]"
    },
    "user2": {
      "username": "otherUsername",
      "email": "[email protected]"
    }
  }
}

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

09-25 18:07