{
"SHOPPING_LIST" : {
"kPLZpp809gePpBiBojsngjZdg6A3:228c1e5b-fe11-4f06-ad32-c54734044a5e" : {
"listId" : "kPLZpp809gePpBiBojsngjZdg6A3:228c1e5b-fe11-4f06-ad32-c54734044a5e",
"listName" : "Lista de la compra de Jesús Lunar Pérez",
"owner" : "kPLZpp809gePpBiBojsngjZdg6A3",
"pendingListElements" : 0,
"sharedWithUsers" : [ "kPLZpp809gePpBiBojsngjZdg6A3" ]
}
},
"users" : {
"kPLZpp809gePpBiBojsngjZdg6A3" : {
"label" : "Jesús Lunar Pérez",
"userId" : "kPLZpp809gePpBiBojsngjZdg6A3",
"userInfo" : {
"nickName" : "Jesús Lunar Pérez",
"userEmail" : "lunarjchav@gmail.com"
}
}
}
}
我已将这些数据存储在实时数据库中,并且我试图获取与某些用户共享的所有SHOPPING_LIST。
我查询数据,例如:
Query query = FirebaseDatabase.getInstance()
.getReference("SHOPPING_LIST")
.orderByChild("sharedWithUsers")
.equalTo(userId /*userId = "kPLZpp809gePpBiBojsngjZdg6A3"*/)
;
但我没有得到任何东西。
我做错了什么?有没有办法调试查询?
提前致谢。
编辑:
最后,正如所建议的那样,我将数据组织更改为:
{
"SHOPPING_LIST" : {
"kPLZpp809gePpBiBojsngjZdg6A3:f65836e3-1f79-43a8-aae8-5a9bb9eb3929" : {
"listId" : "kPLZpp809gePpBiBojsngjZdg6A3:f65836e3-1f79-43a8-aae8-5a9bb9eb3929",
"listName" : "Lista de la compra de Jesús Lunar Pérez",
"owner" : "kPLZpp809gePpBiBojsngjZdg6A3",
"pendingListElements" : 0,
"sharedWithUsers" : {
"kPLZpp809gePpBiBojsngjZdg6A3" : true
}
}
},
"users" : {
"kPLZpp809gePpBiBojsngjZdg6A3" : {
"label" : "Jesús Lunar Pérez",
"userId" : "kPLZpp809gePpBiBojsngjZdg6A3",
"userInfo" : {
"nickName" : "Jesús Lunar Pérez",
"userEmail" : "lunarjchav@gmail.com"
}
}
}
}
我问过:
Query query = FirebaseDatabase.getInstance()
.getReference(ShoppingList.LIST_TYPE.name())
.orderByChild("sharedWithUsers/" + uid)
.equalTo(true)
;
答案 0 :(得分:1)
Firebase无法跨阵列成员执行查询,以查看它是否包含任何位置的特定值或添加/删除记录。
请注意,Firebase文档建议不要使用数组。 Firebase建议的其中一个原因是它使安全规则无法编写。
与NoSQL数据库一样,我会建议您使用这样的替代结构:
"SHOPPING_LIST" : {
"kPLZpp809gePpBiBojsngjZdg6A3:228c1e5b-fe11-4f06-ad32-c54734044a5e" : {
"listId" : "kPLZpp809gePpBiBojsngjZdg6A3:228c1e5b-fe11-4f06-ad32-c54734044a5e",
"listName" : "Lista de la compra de Jesús Lunar Pérez",
"owner" : "kPLZpp809gePpBiBojsngjZdg6A3",
"pendingListElements" : 0,
"sharedWithUsers" {
"kPLZpp809gePpBiBojsngjZdg6A3": true
}
}
因此,我们不是使用数组,而是map
,其中键是uid
,值是布尔true
。
您还可以查看here,了解更多信息。