如何在firebase中使用特定id更新内部数据

时间:2017-08-18 09:29:57

标签: node.js firebase firebase-realtime-database

我正在尝试更新firebase中apply和trigger位置之间的promo id下的节点。它不会更新名称已存在的相同位置。更新名称后会影响排序。我尝试了update()的方法,但失败了。然后setWithPrority()删除我的其他节点(应用和触发),并在更新名称后仅添加名称节点。在firebase中已经存在注释数据,只需更新名称。

我的剧本:

firebase.database().ref('/promotions/v1/' + site + '/'+ promoId).once('value').then(function (snapshot) {
  promo_data = snapshot.val();
  if (promo_data != null) {
    var refss = firebase.database().ref('/promotions/v1/' + site + '/'+ promoId );
    refss.child('/').update({"name":promoRuleName});
  }
});

我的输出! enter image description here
注意: 我没有触发并应用node.I只有promoRuleName字符串。

预期输出!

enter image description here

请帮忙

提前致谢!

2 个答案:

答案 0 :(得分:1)

您在控制台中看到的顺序基于“priority-then-key”。由于您调用了setWithPriority(),因此自然/字母顺序会受到干扰。我强烈建议您不要再调用setWithPriority(),该方法是Firebase支持orderByChild()之前过去的遗物。

要解决当前数据的问题,您需要从拥有它的节点中删除优先级。在您分享的示例数据中,可以通过以下方式完成:

firebase.database().ref('/promotions/v1/22516/46/name').setPriority(null);

另见:What does priority mean in Firebase?

答案 1 :(得分:1)

此脚本适用于apply和触发node.try之间的排序。

    firebase.database().ref('/promotions/v1/' + site + '/'+ promoId).once('value').then(function (snapshot) {
            promo_data = snapshot.val();
            if (promo_data != null) {
                var refss = firebase.database().ref('/promotions/v1/' + site + '/'+ promoId + '/');
                // First null the prority of apply node then update name.
                firebase.database().ref('/promotions/v1/' + site + '/'+ promoId + '/'+'apply/').setPriority(null);
                refss.update({'name': promoRuleName});
            }

        });

首先,我将应用节点的优先级置空,然后使用update()方法更新名称。