我现在正在使用RESTful api处理Firebase。我有一个看起来像这样的样本数据
{
"user1" : {
"Name" : "John Doe",
"acctStatus" : "Pending",
"Liked" : "Y"
},
"user2" : {
"Name" : "Jane Doe",
"acctStatus" : "Done",
"Liked" : "Y"
}
}
所以我要做的是检索acctStatus
为Pending
且Liked
等于Y
的数据。这就是我的api url看起来像
https://firebase.com/user.json?orderBy="acctStatus"&equalTo="Pending"&orderBy="Liked"&equalTo="Y"
然而,当我这样做时,我会检索user1
& user2
。为什么会这样?
答案 0 :(得分:2)
您正在尝试链接Firebase中不允许的多个orderBy
。这是因为太多查询会以负面方式影响性能,Firebase会强迫您优化数据结构。
所以你可以选择多种选择。查看此帖子,了解实时数据库的可能性:Query based on multiple where clauses in Firebase
我建议你采用这两种方法中的一种。
<强> 1。使用新的Cloud Firestore
Firebase最近推出了新的Cloud Firestore,它基本上是一个基于document
的数据库。这使得构建数据变得更加容易,并且您可以链接queries
而不会以不良方式影响性能。您可以在此处了解详情:https://firebase.google.com/docs/firestore/use-rest-api
这是关于如何构建query
的一些有用的额外资源:
Firestore REST API starting query
<强> 2。重组数据库
如果您决定重组数据库,我建议您使用以下结构之一。
将状态添加为节点:
{
"pending": {
"user1" : {
"Name" : "John Doe",
"Liked" : "Y"
},
},
"done": {
"user2" : {
"Name" : "Jane Doe",
"Liked" : "Y"
}
}
}
现在只需将您的请求更改为以下内容:
https://firebase.com/pending.json?orderBy="Liked"&equalTo="Y"
或作为第二个选项,您可以使我们成为这样的组合属性:
{
"user1" : {
"Name" : "John Doe",
"acctStatus" : "Pending",
"Liked" : "Y",
"queryProp" : "Pending-Y"
},
"user2" : {
"Name" : "Jane Doe",
"acctStatus" : "Done",
"Liked" : "Y",
"queryProp" : "Done-Y"
}
}
然后只需按queryProp
订购:
https://firebase.com/user.json?orderBy="queryProp"&equalTo="Pending-Y"
组合属性更易于维护,因为如果status
更改,则无需移动数据。但请记住,您将始终收到queryProp
作为结果的一部分。