Angularfire2 - 可以通过查询更新firebase列表的数据吗?

时间:2017-08-07 17:01:46

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

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或任何其他方式吗?

1 个答案:

答案 0 :(得分:1)

要更新任何数量,您需要该特定项目的
左说,示例中item1的键是' -KpZqM09AEDkhuIYAHSt'然后为了更新item1的数量,你需要参考

Project/items/-KpZqM09AEDkhuIYAHSt

所以要更新所有数量为=== 0到30的条目,你可以这样做:

  • 使用ref(' items')

  • 使用firebase的once()方法获取所有项目
  • 使用forEach迭代项目,并将数量为=== 0的所有项目的键存储在数组中。使用 .key 获取项目中每个项目的键

    var keyArray = [];
    firebase.database().ref('items').once('value', data => {
        data.forEach(item => {
            if (item.val().qty === 0) {
                keyArray.push(item.key);
            }
        });
    });
    
  • 获得密钥后,使用ref(' items /' + keyOfItem)迭代该密钥数组和每个密钥调用firebase update()方法

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

    不要忘记once()返回一个应该首先解析的promise以使第二个代码工作,否则你将keyArray变为空。
    希望您觉得这很有帮助。