我在输入时搜索用户。但是最后它返回了每个用户。我不知道为什么会这样。好像还好
class func findUsers(text: String)->[User]{
let user = User()
var users = [User]()
ref.child("Users").queryOrderedByChild("name").queryStartingAtValue(text).observeEventType(.Value, withBlock: { snapshot in
for u in snapshot.children{
user.name = u.value!["name"] as? String
user.surname = u.value!["surname"] as? String
user.email = u.value!["email"] as? String
user.score = u.value!["score"] as? Int
user.status = u.value!["status"] as? Int
user.id = u.value!["id"] as? String
user.pin = u.value!["pin"] as? String
users.append(user)
print(user.name)
}
})
print("users:", users)
return users
}
您正在使用queryStartingAtValue
。从文档中:
由
FIRDatabaseQuery
返回的实例
queryStartingAtValue:childKey
将响应节点上具有大于startValue或等于startValue且键大于或等于childKey的值的事件。
因此请记住,如果您搜索name
某个用户的,则会为所有名称按字母顺序大于给定名称的用户提供。您需要设置a
queryEndingAtValue
以限制查询范围。
ref.child("Users").queryOrderedByChild("name").queryStartingAtValue(text).queryEndingAtValue(text+"\u{f8ff}")
Firebase旧版文档是了解Firebase如何处理查询的好资源。在那里您会发现:
上面查询中使用的f8ff字符在Unicode范围内是一个很高的代码点。因为它在Unicode中大多数常规字符之后,所以该查询匹配所有以b开头的值。
您可能还会对Elasticsearch感兴趣。Flashlight是一个将Elasticsearch和Firebase集成在一起的节点服务。
如注释所指出的, 如果您搜索的字符串有大写字符, 这 将无效 。在这种情况下,解决方案是 在对象中 有一个
附加字段,其中要搜索的信息全部用小写字母表示 。因此,如果有的话Satoshi Nakamoto
,name
您可以使用保存其他nameSearch
属性satoshi nakamoto
。
最后确保您的搜索字符串也使用小写字母。
您的代码还有其他一些问题。
您正在设置观察者。每当您的数据更改时,它都会触发回调,因此您应该users
在回调中重置数组,以确保没有重复和脏数据。
由于Firebase调用是异步的,因此您的函数不会向用户返回数据。通话return users
时,不会填充用户数组。我建议您使用self.users = users
而不是在函数中返回它。否则,如果要继续使用当前方法并将其返回,则应设置完成处理程序。
class func findUsers(text: String)->Void{
ref.child("Users").queryOrderedByChild("name").queryStartingAtValue(text).queryEndingAtValue(text+"\u{f8ff}").observeEventType(.Value, withBlock: { snapshot in
var user = User()
var users = [User]()
for u in snapshot.children{
user.name = u.value!["name"] as? String
...
users.append(user)
}
self.users = users
})
}
查看其他关于堆栈溢出的问题,有人说这可能是因为valueEventListener的位置不正确,但...不是吗?我正在钻进食物条目/营养条目,但我不知道如何钻进更深。没办法匿名给孩子打电话?我尝试调用childEventListener而不是valueEventListener,其他的都一样,但我再也没有得到那个消息,但我仍然无法检索到我想要的数据。 编辑: 谢谢你到目前为止的帮助。根据下面Has
问题内容: Firebase数据库中的以下数据: 我想检索所有仅活动为true的Weeks。我正在这样设置Firebase参考: 然后执行以下操作: 产生以下输出: 有人可以建议我怎样才能将active设置为true的那几周需要加载到string类型的数组中: 问题答案: 为此,您可以使用并喜欢这样。
问题内容: 我的数据库具有按以下方式排序的值: 我想实现一个朋友添加系统,您可以在其中搜索用户名或电子邮件,并允许您添加此人。 我可以通过使用找到用户 这样我就可以得到用户的整个字典,但是在获取UID时遇到了问题。 snapshot.key给了我“用户”。 使用用户名/电子邮件找到用户的字典后,如何从字典中获取UID值? 问题答案: 对Firebase数据库执行查询时,可能会有多个结果。因此,快照
我在XCode中编写了一个方法,在firebase实时数据库中保存“用户”。不幸的是,数据没有显示在我的浏览器中的实时数据库中,尽管我通过内置的打印命令从Xcode得到了反馈,一切都很顺利。有人知道吗?我真的很高兴听到你的消息。最美好的祝福 PS:是的:读取和写入在我的数据库规则中被激活。
一切正常,但DatabaseReference无法获取数据,这就像是忽略了我的代码运行,就像我的internet无法运行一样,请帮助我,我是这个社区的新手,下面是我的代码和图片。 以前它是工作的,但由于我只是更改了一些代码,使只有currentVersion>=vCode,这样即使数据库中的值是 firebase数据库映像 mainactivity.java manifest.xml 依赖关系
我正在两个标记之间画一条路线,我想保存那条路线。为此,我将包含lat和lng的ArrayList保存在Firebase数据库中。但我在取回航路点时遇到了问题。我是这样插入的: 在检索数据时,我尝试执行以下操作: