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

Angularfire2-是否可以通过查询更新firebase列表的数据?,angular,firebase,firebase-realtime-database,ionic2,angularfire,Angular,Firebase,Firebase Realtime Database,Ionic2,Angularfire,Is angularfire2可以通过使用项目的查询更新多个项目。$key 例如,如果我有这个数据库树 Project --- items ------- {{key}} ------------ name: item1 ------------ quantity : 0 ------- {{key}} ------------ name: item2 ------------ quantity : 0 ------- {{key}} ------------ name: i

Is angularfire2可以通过使用项目的查询更新多个项目。$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
使用foreach或Ionic 2中的任何其他方式是否可能?要更新任何数量,您需要该特定项目的密钥。例如,您的示例中项目1的密钥是“-KpZqM09AEDkhuIYAHSt”,然后为了更新项目1的数量,您需要

Project/items/-KpZqM09AEDkhuIYAHSt
因此,要更新所有数量===0到30的条目,可以执行以下操作:

使用firebase的带有ref'items'的一次性方法获取所有项目

使用forEach迭代项目,并将所有数量===0的项目的键存储在数组中。使用.key获取项中每个项的键

var keyArray = [];
firebase.database().ref('items').once('value', data => {
    data.forEach(item => {
        if (item.val().qty === 0) {
            keyArray.push(item.key);
        }
    });
});
一旦你得到了这些键,就在这个键数组上迭代,并且对于每个键调用firebase更新方法,使用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为空。 希望这对你有所帮助