更新所有孩子

时间:2017-03-18 15:21:54

标签: swift firebase

我在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"在一个电话中。

2 个答案:

答案 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