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

Angularfire2 - Is possible to update the data of firebase list by query?

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

要更新任何数量,您需要该特定项目的

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

Project/items/-KpZqM09AEDkhuIYAHSt

因此,要将所有数量===0 的条目更新为 30,您可以这样做:

  • 使用 firebase 的 once() 方法和 ref('items')

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

    中每一项的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() returns 一个应首先解决的承诺,以使第二个代码正常工作,否则您将获得空的 keyArray。
    希望这对您有所帮助。