gpt4 book ai didi

java - Firebase 查询列表 "contains"值

转载 作者:行者123 更新时间:2023-12-01 19:56:12 25 4
gpt4 key购买 nike

{
"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)
;

最佳答案

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,值是 boolean 值 true .

您也可以看看,here ,了解更多信息。

关于java - Firebase 查询列表<String> "contains"值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49654537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com