【问题标题】:Angularfire2 - Is possible to update the data of firebase list by query?Angularfire2 - 是否可以通过查询更新 firebase 列表的数据?
【发布时间】:2017-08-07 17:01:45
【问题描述】:

angularfire2 是否可以通过使用查询而不是 item.$key 来更新多个项目

例如,如果我有这个数据库树

 Project
 --- items
 ------- {{key}}
 ------------ name: item1
 ------------ quantity : 0
 ------- {{key}}
 ------------ name: item2
 ------------ quantity : 0
 ------- {{key}}
 ------------ name: item3
 ------------ quantity : 12

我想将每个包含 0 数量的项目的数量值更新为 30,例如这个新的数据库树。

 Project
 --- items
 ------- {{key}}
 ------------ name: item1
 ------------ quantity : 30
 ------- {{key}}
 ------------ name: item2
 ------------ quantity : 30
 ------- {{key}}
 ------------ name: item3
 ------------ quantity : 12

是否可以通过在 Ionic 2 中使用 foreach 或任何其他方式来实现?

【问题讨论】:

    标签: angular firebase firebase-realtime-database ionic2 angularfire


    【解决方案1】:

    要更新任何 quantity ,您需要该特定项目的 key

    比如说,在您的示例中 item1 的键是 ' -KpZqM09AEDkhuIYAHSt' 然后为了更新 item1 的数量,您需要参考

    Project/items/-KpZqM09AEDkhuIYAHSt
    

    因此,要将所有数量===0 的条目更新为 30,您可以执行以下操作:

    • 使用firebase的once()方法和ref('items')获取所有items

    • 使用 forEach 遍历项目并将所有数量 ===0 的项目的键存储在一个数组中。使用.key获取items中每个item的key

      var keyArray = [];
      firebase.database().ref('items').once('value', data => {
          data.forEach(item => {
              if (item.val().qty === 0) {
                  keyArray.push(item.key);
              }
          });
      });
      
    • 一旦你得到键,迭代那个键数组,并为每个键调用 firebase update() 方法,使用 ref('items/'+keyOfItem)

      keyArray.forEach(keyOfItem => {
      firebase.database().ref('item/' + keyOfItem).update({
                  quantity: 30
              });
      }
      //here keyOfItem is key of item having qty===0
      

      不要忘记,once() 返回一个应首先解决的承诺,以使第二个代码正常工作,否则您将得到 keyArray 为空。
      希望这对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多