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
})
由于我是 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
})