【问题标题】:Firebase queryEqual(toValue:) not workingFirebase queryEqual(toValue :) 不起作用
【发布时间】:2017-07-24 19:02:45
【问题描述】:

我有一个具有以下结构的数据库

"users":{
    "user1234" {
       "username": "user1234" 
    }
}

我正在尝试进行查询以查找用户名为“user1234”的用户。当我使用 queryEqual(toValue:) 时,我没有得到任何匹配,但是当使用 queryStarting(atValue:) 时,我确实得到了用户。我已经确认用户名实际上是“user1234”。我做错了什么?

let query1 = databaseRef.child("users").queryOrdered(byChild:"username").queryStarting(atValue: "user1234").queryLimited(toFirst: 1) 
query1.observeSingleEvent(of: FIRDataEventType.value, with: { (snapshot) in 
    //snapshot contains the user with username "user1234"
})

但是以下不起作用

let query2 = databaseRef.child("users").queryOrdered(byChild:"username").queryEqual(toValue: "user1234")    
query2.observeSingleEvent(of: FIRDataEventType.value, with: { (snapshot) in 
    //snapshot DOES NOT contain the user with username "user1234"
})

我的安全规则是

"rules": {
   ".read": "true",
   ".write": "true",      
   "users": {
     "$uid": {
       ".indexOn": ["username"],
     },
   },
 },

【问题讨论】:

  • 您确定第二个查询中的 usernameLowered = "user1234" 吗?
  • 是的,这只是输入问题时的拼写错误。谢谢指出

标签: ios swift firebase firebase-realtime-database


【解决方案1】:

您正面临这个问题,因为查询只深入了一层,因此您需要扁平化数据,或者您必须找出不同的方法。 在这里你可以找到更多detailed answer.

【讨论】:

  • 我的第一个查询有效,而第二个查询无效,即使它们处于同一级别,所以在我的情况下深度应该改变任何东西没有逻辑上的理由
  • 刚刚试了一下,效果很好。可能是您的索引有问题。您的安全规则是什么样的?
  • 试一试:"users": { ".indexOn": ["username"] } 不带 uid
  • 另外,您能否发布您的数据库的屏幕截图,或者至少发布带有“用户”节点的部分截图?
  • 这似乎已经解决了!不完全理解为什么其他查询产生了正确的结果,但不知何故它现在正在工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
  • 2014-08-04
  • 2018-09-18
相关资源
最近更新 更多