我正在尝试更新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});
}
});
我的输出!
注意:
我没有触发并应用node.I只有promoRuleName字符串。
预期输出!
请帮忙
提前致谢!
答案 0 :(得分:1)
您在控制台中看到的顺序基于“priority-then-key”。由于您调用了setWithPriority()
,因此自然/字母顺序会受到干扰。我强烈建议您不要再调用setWithPriority()
,该方法是Firebase支持orderByChild()
之前过去的遗物。
要解决当前数据的问题,您需要从拥有它的节点中删除优先级。在您分享的示例数据中,可以通过以下方式完成:
firebase.database().ref('/promotions/v1/22516/46/name').setPriority(null);
答案 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()
方法更新名称。