【发布时间】:2020-04-25 00:31:55
【问题描述】:
我被困在 android 中的一种 firebase 操作中。 我的要求:
我有一个名为:“值”的表 此值表包含以下类型的数据。
{
"menu": [
{
"category": "cocktails",
"product": [
{
"id": "123",
"name": "test1"
},
{
"id": "456",
"name": "test2"
}
]
},
{
"category": "vodka",
"product": [
{
"id": "789",
"name": "test3"
},
{
"id": "901",
"name": "test4"
}
]
}
]
}
现在,我想用 name = "test5" 更新 id : 123 ,如何更新这个嵌套数组对象 在android的firebase数据库中?
我尝试了以下操作,但它更新/添加了整个菜单数组而不是特定的产品数组对象。
我只想更新产品数组对象。
以下是我尝试过的代码,但它会更新所有菜单数组。
val listPorduct = ArrayList<HashMap<String, Any>>()
for ((i, product) in productList.withIndex()) {
var productMap = HashMap<String, Any>()
productMap = hashMapOf(
"id" to "123",
"name" to "test5")
listPorduct.add(productMap)
}
val map = hashMapOf<String, Any>()
map.put("category", list[position].category)
map.put("product", listPorduct)
repository.getTabs().update("menu", FieldValue.arrayUnion(map))
如果我尝试使用
repository.getTabs().update("menu/product", FieldValue.arrayUnion(map))
or
repository.getTabs().update("menu.product", FieldValue.arrayUnion(map))
然后出现问题/或不允许点。我有最新的 firebase gradle 文件。
如何更新产品对象的特定位置? 请问有人可以帮我解决这个问题吗?
firebase 数据库的图像。
【问题讨论】:
-
我们需要更新数组中的数组请给出这个问题的解决方案
-
@AlexMamo:虽然您链接的问题显示了类似的问题,但开发人员了解如何将其应用于他们自己的问题通常会有所帮助。我强烈建议在关闭骗子时发表评论,说明如何将链接的答案应用于他们的问题。我也不相信链接的答案是所有案例的最佳答案。将子元素存储在子集合中是一种有效的方法,但将它们存储在同一个文档中也是有效的。我投票重新提出这个问题,允许其他人用如何更新嵌套/数组字段的实际代码来回答。
-
@FrankvanPuffelen 是的,不发表评论是我的错,我通常会这样做。现在,我刚刚回答了这个问题,并提供了有关此特定用例的一些详细信息。但是,将子元素存储在子集合中只是初始解决方案之外的另一种解决方案。再次感谢 puf。
标签: android arrays firebase kotlin google-cloud-firestore