Javascript 如何使用不同数据库层次结构中的函数将新参数写入firebase数据库?

Javascript 如何使用不同数据库层次结构中的函数将新参数写入firebase数据库?,javascript,firebase,firebase-realtime-database,google-cloud-functions,Javascript,Firebase,Firebase Realtime Database,Google Cloud Functions,小结:需要一种方法来搜索firebase数据库并将匹配的对象附加到新元素。 Firebase数据库结构如下所示: { "Message2" : { "-KnSKLk3dhRf8MgjZAnO" : { "var1" : "value1", "var2" : "value2", "endDate1" : "Click to enter", "searchvar" : "Uhrts", "name" : "name",

小结:需要一种方法来搜索firebase数据库并将匹配的对象附加到新元素。 Firebase数据库结构如下所示:

{
  "Message2" : {
    "-KnSKLk3dhRf8MgjZAnO" : {
      "var1" : "value1",
      "var2" : "value2",
      "endDate1" : "Click to enter",
      "searchvar" : "Uhrts",
      "name" : "name",
      "numbervar" : "5",
      "startDate1" : "Click to enter",
      "varName" : "Neptune"
    },
    "-KnSKLvtA3X3NsoErfa-" : {
      "var1" : "value2",
      "var2" : "value3",
      "endDate1" : "Click to enter",
      "searchvar" : "qwe",
      "name" : "name",
      "numbervar" : "5",
      "startDate1" : "Click to enter",
      "varName" : "Neptune"
    }
  }
}
最终目标是在根节点(Messages2)的每个元素中搜索字符串(比如“Uhrts”),如果字符串存在,则向Messages2的所有子级添加一个新参数,该子级与Uhrts搜索匹配(比如-KnSKLk3dhRf8MgjZAnO,…等等)

这是我在firebase中部署的index.js代码:

'use strict';

const functions = require('firebase-functions');

exports.qwerty = functions.database.ref('/Messages2').onWrite(event => {
    const message = event.data.val();
    if (message) {
        var string = new RegExp("Uhrts");
        var upper;
        var lower;
        for (upper in message){
            for (lower in message[upper]){
                if (string.test(message[upper][lower])) {
                    message[upper].cost = "1500000";
                    return event.data.adminRef.update({
                    }); 
                } 
            }     
        }
    }
});
  • 当我尝试将-KnSKLk3dhRf8MgjZAnO下的数据转储到控制台中时,它的“cost”已正确更新,但数据库本身没有更新,并且保持不变。我错过了什么
  • 此外,我希望所有具有UHRT的子元素都发生这种情况,但控制台只打印出它找到的第一个匹配项。如果ref用于Messages2,那么2 for循环是否不负责遍历所有元素?如何附加到数据库结构的所有元素,而不是仅附加一个元素

  • 只要满足这里描述的最终目标,我就可以更改数据库结构或代码。

    您的问题中包含了JSON树的图片。请将其替换为实际的JSON文本,您可以通过单击中的导出JSON链接轻松获取。将JSON作为文本使其具有可搜索性,允许我们轻松地使用它来测试您的实际数据,并在我们的答案中使用它,这通常是一件好事。添加JSON作为文本。同时在开头写一个总结,以防有用@Frank van Puffelen,既然你是firebase团队的成员,如果stack不是回答这个问题的最佳地点,还有其他地方我可以试着得到回答吗?我已经在firebase bug和功能请求页面中提出了功能请求。任何其他建议?只要在
    /Messages2
    下写入任何数据,就会触发您当前的功能。因此,每当在此处添加新节点时,都会重新处理所有现有数据。这真的是您的意图吗?数据库触发的函数应该返回一个承诺,该承诺在其工作完成时解析。您当前的代码可能会返回多个承诺。我建议你在,和中阅读这篇文章。