如何在Firebase Firestore中更新文档ID?

iSa*_*mya 4 javascript firebase vue.js google-cloud-firestore

在我的Firestore数据库中,我已将用户的电子邮件作为文档密钥。如果我想db.collection('users').doc('email_id')执行某些操作,该怎么办。现在的问题是,当用户更新其电子邮件ID时,我找不到任何方法来更新document idFirestore中的。

我试着做

db.collection('users').doc(old_email).update({
  id: new_email
})
Run Code Online (Sandbox Code Playgroud)

但这实际上创建了一个新字段id,该新字段以该文档内的新电子邮件作为值,而不是更新实际字段,document id以便我可以在其中传递doc()并获取有关用户的相同数据。

有人知道怎么做吗?如果是这样,请分享。

在发布此问题之前,我已经检查了google和firestore文档,但找不到任何更新文档ID的方法。请帮忙。

Fra*_*len 11

没有用于更改现有文档ID的API,也没有用于移动文档的API。如果要将相同的内容存储在其他文档中,则必须:

  1. 从现有密钥中阅读文档。
  2. 将文档写在新密钥下。
  3. 删除旧键下的文档。

您需要在事务中运行这些操作,以确保这些操作原子完成。

  • 我希望有一个选项可以更新现有的文档 ID,但话虽如此,我还是接受这个答案。你可以拥有我的updoot (2认同)
  • 我实现的另一个解决方案是有两个不同的 documentID(documentID 和 documendUID)。DocumentUID 用于查询,可以根据需要进行更改(用作文档中的字段),而另一个 documentID 不会更改,主要用于定义文档本身。我还创建了一个“翻译”文档,该文档将 documentUID 作为文档的标识符,并将 documentID 和 documentUID 作为字段。我用它来翻译 documentUID 的请求,如果我需要引用 documentID,我可以简单地阅读这个文档。 (2认同)
  • 听起来像是一个很好的答案的基础@BrianBegun:) (2认同)

Bad*_*dgy 6

我不认为有一种方法可以更改文档 ID,但即使有一种方法,您所做的也是非常错误的。ID 应该是一个唯一标识符,让自己成为一个 UserID 字段,例如使用 Firebase Authfirebase.Auth().currentUser.uid作为您在 Firestore 中保存的用户特定数据的 ID。

我建议你改变它,解决你的问题,更重要的是给你一个坚实的结构。(来自 Auth 的 UID 是唯一的)