当前位置: 首页 > 面试题库 >

是否可以在Firebase实时数据库中重命名密钥?

颜思淼
2023-03-14
问题内容

我想知道,有没有办法更新键值?

让我们使用以下数据:

我的资料

我正在使用set()写入数据。现在,我希望用户对其进行编辑bookTitle,并且需要在两个地方都进行更改。我尝试使用update(),但似乎无法正常工作。我只能在bookTitle中编辑bookInfoNOT books。

移动不是一种选择,因为它会删除bookData。我也尝试使用push()进行编写,但是之后,由于我没有
pushID ,因此无法正确搜索(我需要搜索,因为用户不能拥有两本同名的书)

那么,有没有办法更新键值?还是有更好的方法呢?我接受建议。谢谢!

更新:这是我目前用来更新内部书名的内容bookInfo

var bookName = document.getElementById('bookName').value;

firebase.database().ref('books/' + bookName + '/bookInfo').update({
    bookTitle : bookName
});

问题答案:

我想我明白了您要做什么。Firebase没有通过更新“重新命名”路径的一部分的概念。相反,您将必须完全
删除现有节点并重新创建它。您可以这样做:

var booksRef = firebase.database().ref('books');
booksRef.child(oldTitle).once('value').then(function(snap) {
  var data = snap.val();
  data.bookInfo.bookTitle = newTitle;
  var update = {};
  update[oldTitle] = null;
  update[newTitle] = data;
  return booksRef.update(update);
});

这将从中删除信息,books/oldTitle并在中添加新标题books/newTitle。

警告:这取决于读取数据,然后执行第二次异步更新。如果您可能有多个用户同时操作同一数据,则可能会导致问题。您可以使用事务来自动执行此操作,但是如果它/books是具有许多节点的顶级资源,则可能会导致性能问题。

如果一个人可能一次编辑数据,则上述解决方案很好。如果不是,您可能要考虑使用非用户控制的标识符,例如推送ID。



 类似资料:
  • 问题内容: 我正在寻找一种重命名Hashmap密钥的方法,但是我不知道在Java中是否可行。 问题答案: 尝试删除该元素,然后使用新名称再次放置它。假设地图中的键是,则可以通过以下方式实现:

  • 我在文档中看到Firebase实时数据库是加密的<但是有一些术语我不完全理解: Firebase服务使用HTTPS加密传输中的数据,并从逻辑上隔离客户数据。什么在逻辑上隔离了客户数据 平均值 “此外,几个Firebase服务还加密其静态数据:Firebase实时数据库Firebase测试实验室”有人能用外行的术语解释一下吗

  • 问题内容: 基本路线是这样的: 是否可以命名该路由并在任何模板中使用它,以便可以像这样使用它: 灵感来自Django :) 问题答案: 没有开箱即用的机制。但是,您可以模仿Django的样式:定义文件,该文件将包含URL数组。首先开始: myviews.js urls.js 现在在 app.js (或任何主文件)中,您需要将URL绑定到Express。例如这样: app.js 现在,您可以定义自定

  • 我正在使用ADFS 2.0开发OIOSAML。我需要对IdP响应进行签名和加密。以下是我对SAML请求和响应的签名和加密工作原理的理解: < li>SP使用自己的证书密钥(Key-1)对请求进行签名 < li>IdP使用SP的公钥(Key-1)验证请求 < li>IdP使用自己的证书密钥(Key-2)对响应进行签名 < li>IdP使用SP提供的证书密钥(Key-3)加密响应声明 < li>SP使

  • 我的Firebase实时数据库的一个子节点变得巨大(大约20 GB),我需要清除这个节点,并使用Python Admin SDK将上个月从备份中提取的数据插入Firebase实时数据库。 在文档中,我看到了以下选项: set-将数据写入或替换到定义的路径,如消息/用户/ 更新-更新定义路径的某些键,而不替换所有数据 推-添加到数据库中的数据列表。每次将新节点推送到列表上,数据库都会生成一个唯一的键

  • 所以我试图将一些数据存储到我的实时数据库中。我目前有两个独立的视图控制器,一个用于用户注册,另一个用于用户选择其配置文件图像并能够更改该图像。在注册页面上,我将“用户名”保存到firebase,如下所示: 对于个人资料图像,我有这样保存的数据 我希望这两个数据都保存在“用户”下-