如何阻止Firebase创建其他嵌套对象或如何访问新生成的字符串?

时间:2016-08-05 11:57:29

标签: firebase firebase-realtime-database

问题:每当我向订单数组添加订单时,都会添加一个额外的嵌套数组元素( -KOPWA ... ) 。我不介意,除了,我不知道如何访问该嵌套字符串以访问它的子节点。

以下用户的数据库节点示例:

enter image description here

firebase.database().ref('users/'+userIdState+'/orders/'+<<unique numbervariable>>).push({
  "order":{"test":"product","quantity":2}
});

我使用上面的代码将具有唯一编号的新json对象推送到firebase数组。仍会生成带有奇怪字符串的嵌套数组。

任何人都可以帮助我理解如何:使用我自己的唯一字符串创建自己的嵌套数组,或者如何访问从firebase生成的嵌套字符串,以便我可以访问它#s; s儿童节点。 用户将生成多个嵌套数组实例。

非常感谢任何帮助。

谢谢, 萌

1 个答案:

答案 0 :(得分:3)

您遇到此行为是因为Firebase的push与数组push不同。我建议您阅读this article以了解其工作原理。

对于解决方案,您只需在代码中将push更改为set即可。这将创建您(可能)期望的结构,即

1:
  order:
    ...

如果允许并发写入(即,如果示例中的“唯一编号”并非总是唯一的),则这可能是不安全的。

Afaik Firebase建议使用push安全地创建集合/“数组”。您可以通过调用key返回的引用上的push属性来检索生成的密钥。像这样:

var ref = firebase.database().ref('users/'+userIdState+'/orders/'+<<unique numbervariable>>).push({
  "order":{"test":"product","quantity":2}
});
var generatedKey = ref.key; // the value you're looking for

如果你决定使用它,你可以直接删除你现在的订单号,然后只使用生成的订单号。