我在firebase数据库中有以下结构:
"profiles": {
"user_id" : {
"id_profile_1" : {
"photos" : ".."
"selected" : "0"
},
"id_profile_2" : {
"photos" : ".."
"selected" : "0"
},
...
}
}
有没有办法同时更新所有"选择"所有孩子一次到场?
我正在做这件事:
let ref = FIRDatabase.database().reference()
let post = ["selected": "-1"]
ref.child("profiles").child("user_id").updateChildValues(post)
但它在" user_id"添加了一个新的孩子。水平。
谢谢!
更新
澄清一下,实际结构如下:
"profiles": {
"AZWul77p47.." : {
"KeC9NCb4Kh..." : {
"photos" : ".."
"selected" : "1"
},
"Kj4yZOd6aJ..." : {
"photos" : ".."
"selected" : "0"
},
...
}
}
当用户在应用中选择其他个人资料时,"已选择"此个人资料更改为" 1"以及所有其他人到" 0"。这就是为什么我要更新所有其他人"选择"到" 0"在一个电话中。
答案 0 :(得分:0)
简短回答是否。
您可以迭代每个 id_profile 并每次执行updateChild
调用,或者重新构建数据库。
如果您经常更改选定的值,我建议您考虑后一种选择,因为迭代所有这些孩子会很昂贵。
<强>更新强>
如果配置文件中一次只能选择1个项目,则可以对结构进行标准化(展平)。它可以相对节省大量空间,并且可以更轻松地设置选择
"selectedItems": {
"AZWul77p47.." : { // profile id
"selected": "KeC9NCb4Kh..." // set it to the selected item id
},
...
},
"profiles": {
"AZWul77p47.." : {
"KeC9NCb4Kh..." : {
"photos" : ".."
},
"Kj4yZOd6aJ..." : {
"photos" : ".."
},
...
}
}
每当您选择其他商品时,只需使用新选择的商品ID更新所选子商品
答案 1 :(得分:0)
如果您知道有多少个id_profile节点,则可以使用多路径更新。你可以使用一个简单的for循环 - 我假设你有10个id_profiles。请记住(来自Firebase文档),
以这种方式进行的同步更新是原子的:要么所有更新都成功,要么所有更新都失败。
$html !== false && $html !== ''
有关详细信息,请参阅here。