React Native:在 firebase 实时数据库中创建自定义子节点

React Native: Create custom child node in firebase realtime database

由于我是 firebase 和 React 的新手,非常感谢您的帮助,因为我几乎尝试了所有方法。

以下是我在 firebase 中的数据结构。

当我添加新的 Beverage 类型时,即 Milk 及其字段,即嵌套节点和数据到 Products,firebase根据随机数生成子节点。请帮助我,让我知道如何创建数据结构中提到的没有文本的自定义子节点。实际上,我已经准备好 json 如下所述,并希望添加新的饮料类型及其详细信息,如下所述 json.

"Id" : 1,
"Milk" : {
  "Id" : 2,
  "Imported Milks" : {
    "Frosted Milk" : 20,
    "Milk Up" : 10
  },
  "Local Milks" : {
    "Cow Power" : 5,
    "Milk Man" : 3
  }
}

以下是我的代码:

       let product = "Milk";
       const dbUpdate = await firebase.database().ref("Products");
       //this.state.selectedCategory is Milk
       await dbUpdate.child(this.state.selectedCategory).set(
            {
             product:
                    {
                        Id: item.Id,
                        "Imported Milks": {
                                "Frosted Milk": 20,
                                "Milk Up" : 10
                            }                               
                    }
            }
        );

我刚刚对我的代码进行了一些更改。它有效,但设置删除了所有以前的记录,只添加了一个新记录。

       let product = "Milk";
       const dbUpdate = await firebase.database().ref("Products");
       //this.state.selectedCategory is Milk
       await dbUpdate.set(
            {
             this.state.selectedCategory:{
                    product:
                    {
                        Id: item.Id,
                        "Imported Milks": {
                                "Frosted Milk": 20,
                                "Milk Up" : 10
                            }                               
                    }
                }
            }
        );

谢谢

如果您想使用自己指定的密钥添加新饮料,您可以这样做:

firebase.database().ref("Products/Beverages/Beers").child("Lagunitas").set(1);

所以这里重要的是我们不调用 push(这会生成一个 ID),而是指定您自己的密钥(在本例中调用 child()) .


如果你想设置整个 JSON 对象,那就是:

firebase.database().ref("Products").set({
  Beverages: {
    Beers: {
      Id: 1,
      "Imported Beers": {
        Bella: 20,
        LoveBug: 5
      }
    }
  }
})

如果你想在路径中使用你的product变量的值来更新数据库中的路径,你可以这样做:

let product = "Milk";
const dbUpdate = await firebase.database().ref("Products");
                                                // 
await dbUpdate.child(this.state.selectedCategory).update({
  [product]: //  Use [] to use the value of the variable
     {
         Id: item.Id,
         "Imported Milks": {
                 "Frosted Milk": 20,
                 "Milk Up" : 10
             }                               
     }
 });

这将在 selectedCategory 中设置 Milk 键,但不修改其他子键。


如果要对分支中的一个key进行深度更新,也可以使用路径作为key。因此,例如要将这两项添加到 Imported Milks,但保留任何其他值不变,您可以这样做:

firebase.database().ref("Products").update({
  "Beverages/Milk/Imported Milks/Frosted Milk": 20,
  "Beverages/Milk/Imported Milks/Milk Up" : 10
})