【问题标题】:How to update a value using in firebase realtime database?如何在firebase实时数据库中更新值?
【发布时间】:2019-08-05 07:13:18
【问题描述】:

所以我目前正在使用 Cloud Functions。我正在做的是这样的:

export const onMessageCreate = functions.database.ref('/Users/{user}/{message}/{text}').onCreate((snapshot, context) => {
      const data = snapshot.val()
      const changedData: string = change(byteData.text)
      return snapshot.ref.update({id: compressedByteData}) //This is the problem
  })

change(input: string): string 是我的一个自定义函数,它只是用生日蛋糕表情符号替换每个出现的生日快乐这个词。然而,在我的参考文献中看起来像这样:"/Users/{user}/master/{messageGroup}/content/{message}" 我想更新文本的值。但是,因为我不知道{text} 是什么,所以我无法将它存储在正确的位置。有人有什么建议吗?

change() 函数是:

function change(data:string):string {
       return data.replace(/\bhappy-birthday\b/g, '????')
}

这是 Firebase 节点图片: Firebase Node Setup

所以我想用我的 Cloud Functions 更改 01、02、03(值无关紧要)。

我想做什么的视觉表示: Visual Representation

【问题讨论】:

    标签: javascript typescript firebase google-cloud-functions


    【解决方案1】:

    跟随您的 cmets 的新更新:

    如果我正确理解你最后的 cmets,这应该可以解决问题:

    export const onMessageCreate = functions.database.ref('/Users/{user}/master/{messageGroup}/content/{message}').onCreate((snapshot, context) => {
          const data = snapshot.val();
          const changedData: string = change(byteData.text);
    
          const user = context.params.user;
          const messageGroup = context.params.messageGroup;
    
          return admin.database().ref(`/Users/${user}/master/${messageGroup}/content`).update({4f3f: changedData}); 
    
      })
    

    跟随你的 cmets 更新:

    很抱歉,但它不是 100% 清楚您要更新的内容。

    如果您想要“在(您)在/Users/{user}/master/{messageGroup}/content/{message} 创建值时更改/Users/{user}/master/{messageGroup}/content/{message} 的值”为changedData,只需执行以下操作:

    export const onMessageCreate = functions.database.ref('/Users/{user}/master/{messageGroup}/content/{message}').onCreate((snapshot, context) => {
          const data = snapshot.val();
          const changedData: string = change(byteData.text);
          return snapshot.ref.update({message: changedData}); 
      })
    

    在您的 Cloud Function 中,您将能够通过以下方式获取路径值

    const user = context.params.user;
    const message = context.params.message;
    

    然后构建所需的节点引用。


    正如您在documentation 中看到的那样:

    您可以通过用大括号括起来将路径组件指定为通配符; ref('foo/{bar}') 匹配 /foo 的任何孩子。 该 这些通配符路径组件的值在 函数的 EventContext.params 对象。在这个例子中, 值可用作 event.params.bar。

    【讨论】:

    • 其实并不是100%清楚你想改变哪个值。您能否使用数据库的摘录(或至少是其结构的打印屏幕)更新您的问题,并指出您确切想要修改的内容?
    • 因此,当您在“/Users/{user}/”下创建值时,您希望更改“/Users/{user}/master/{messageGroup}/content/{message}”的值{消息}/{文本}”。对吗?
    • 不,当我在“/Users/{user}/”创建值时,我想更改“/Users/{user}/master/{messageGroup}/content/{message}”的值主/{messageGroup}/content/{message}”。 {message} 是问题所在。我的第一个问题是其他问题,因为我的公司不允许你知道的完全披露......
    • 好的,因此您可以调整您在问题中触发云功能的路径,因为目前路径不同。
    • Error: Reference.update failed: First argument must be an object containing the children to replace: 是我尝试第一种方法时在日志中给出的错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    相关资源
    最近更新 更多