【问题标题】:How can I update inner data with specific id in firebase如何在firebase中更新具有特定ID的内部数据
【发布时间】:2017-08-23 22:15:08
【问题描述】:

我正在尝试在 Firebase 中的应用和触发位置之间更新促销 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});
  }
});

我的输出!
笔记: 我没有触发和应用节点。我只有 promoRuleName 字符串。

预期输出!

.

请帮忙

提前致谢!

【问题讨论】:

  • 您希望您的姓名数据在 apply 或 promoId 下?
  • @Gabriel Diez under promoId 但是这个名字应该在apply和trigger之间,看第二个截图
  • 好吧,我明白你想要什么,但我不明白你为什么要这么做..
  • @Gabriel Diez 我想在更新文本后在原始位置看到文本。当我更新文本时,我的订购受到干扰。

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


【解决方案1】:

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

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

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

另见:What does priority mean in Firebase?

【讨论】:

  • 请提供适当的脚本以更新数据。上面的脚本在节点末尾添加名称。我的脚本没有更新 firebase:firebase.database().ref('/promotions/v1/' + site + '/'+ promoId+'/'+'name').setPriority(promoRuleName,5);
  • 你能解释一下吗?
  • 不要设置优先级;清除它们。我的代码展示了如何做到这一点。
  • 感谢回复,请问如何设置应用和触发节点之间的优先级。
【解决方案2】:

此脚本可以正常工作以在应用和触发节点之间进行排序。试试这个。

    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() 方法更新名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多