如何在 Swift 的 Firebase Firestore 中获取当前文档 ID?
Posted
技术标签:
【中文标题】如何在 Swift 的 Firebase Firestore 中获取当前文档 ID?【英文标题】:How to get current document id in Firebase Firestore in Swift? 【发布时间】:2021-04-29 16:22:12 【问题描述】:我有这两个文档 ID(我以后还会有更多)
在我的代码的某些部分中,当用户点击表格视图单元格时,我正在使用以下代码更新我的 Firebase:
let dbCollection = K.FStore.db.collection(K.FStore.User.UsersCollectionName).document("EMSce9qnfNnPmn8JBobn")
if let textFieldText = textField.text
dbCollection.updateData([
self.userDataInsideTableViewKeysArray[indexPath.row] as! String : textFieldText
]) err in
if let err = err
print("Error updating document: \(err)")
else
print("Document successfully updated")
我有一个应用程序,当用户使用 firebase 提供的电子邮件和密码身份验证功能注册时,我会创建一个数据库集合,其中包含该唯一电子邮件以及其他一些数据(性别、年龄、电话号码......)文档 ID是随机生成的,如果我在它们之间循环,我可以访问所有文档 ID,但是我想要这个特定文档的文档 ID,以便我可以更新它,我想用 document(documentID) 替换 document("EMSce9qnfNnPmn8JBobn")我有多个用户
【问题讨论】:
1) 您(以及 Firebase 如何)知道需要更新哪些文档? IE。文档中标识用户属于什么? 2)使用用户的UID作为文档ID的用户配置文件是惯用的。我强烈建议您更改数据以执行此操作,在这种情况下,您可以通过以下方式获取当前用户的文档:K.FStore.db.collection(K.FStore.User.UsersCollectionName).document(Auth.auth().currentUser.uid)
感谢您的支持。对于第一个问题,这正是我要问的原因,老实说,我不知道。每个用户的电子邮件地址都是唯一的。我不知道这是否有帮助。至于第二个问题,当我使用 K.FStore.db.collection(K.FStore.User.UsersCollectionName).addDocument(data:["Name" : name ...]) 创建集合时,documentID 是随机生成的,如何将其更改为用户的UID?
2) 请参阅firebase.google.com/docs/firestore/manage-data/… 中的第一个示例,了解如何使用 (setDocument
) 自己指定文档 ID。另请参阅***.com/a/60418826 1)如果您知道文档中的某些独特内容,则可以使用查询来查找文档:firebase.google.com/docs/firestore/query-data/…
我在下面的回答中写了一个更冗长的版本。
【参考方案1】:
我不确定我是否理解正确,但如果您想获取当前登录用户的文档,那就是:
K.FStore.db.collection(K.FStore.User.UsersCollectionName).document(Auth.auth().currentUser.uid)
另请参阅getting the currently signed-in user 上的文档。
更新
您似乎已使用 addDocument
调用添加了用户配置文件,这意味着 ID 与用户无关。在这种情况下,您需要知道文档中的某些内容,以唯一标识要更新的文档。
由于您说您的电子邮件地址是唯一的,并且存储在文档中,您可以use a query 查找匹配的文档,然后循环并更新每个文档:
db.collection("cities").whereField("capital", isEqualTo: true)
.getDocuments() (querySnapshot, err) in
if let err = err
print("Error getting documents: \(err)")
else
for document in querySnapshot!.documents
document.ref.updateData([
"fieldToUpdate": "newValue"
])
如果您有一个用户数据集合,其中每个文档属于特定用户,并且每个用户只能拥有一个文档,那么使用 UID 作为文档 ID 是惯用的。要使用 UID 作为文档 ID 创建文档,请参阅 setting a document 上文档中的第一个示例。
如果您使用此数据结构,则无需查询即可找到用户的个人资料文档,而是可以使用顶部的语句来确定要更新的文档。
【讨论】:
嘿,谢谢你的回答,我之前确实试过,但我收到的 ID 是:“4J3kRyPR49euHhozyHHlR06Bfpe2”,它不等同于上述任何文档 ID,所以什么时候做 document(uid)它说找不到文件! 所以这意味着该文档不适用于当前用户,这就是为什么我开始回答时说“如果您想获取当前登录用户的文档”。如果这不是您想要的,那么请编辑您的问题以阐明是什么决定了您要加载的文档。 好的,请阅读此评论,如果您现在明白了,请告诉我,我有一个应用程序,当用户使用 firebase 提供的电子邮件和密码身份验证功能注册时,我会使用该唯一电子邮件创建一个 db 集合连同其他一些数据(性别、年龄、电话号码......)文档 ID 是随机生成的,如果我在它们之间循环,我可以访问所有文档 ID,但是我想要这个特定的文档 ID,以便我可以更新它,我想用 document(documentID) 替换 document("EMSce9qnfNnPmn8JBobn") 因为我有多个用户 感谢您的澄清。 1)请编辑您的问题(下面有一个链接)以准确显示该信息。将其隐藏在此处的评论中,使其他人不太可能看到它。另外,我很有可能会删除我的答案,因为它不再适用于您更新的问题描述。 2) 我强烈建议使用用户的 UID 作为文档 ID,因为这是一种非常惯用的方式,既可以识别每个用户属于哪个文档,又可以确保每个用户只能拥有一个配置文件。 我用你的第二种方法用 UID 创建它,就像一个魅力。现在我的第一次尝试对我来说听起来很愚蠢,哈哈。你每天都在学习新东西,非常感谢!以上是关于如何在 Swift 的 Firebase Firestore 中获取当前文档 ID?的主要内容,如果未能解决你的问题,请参考以下文章
如何修复:“@angular/fire”'没有导出成员 'AngularFireModule'.ts(2305) ionic、firebase、angular
当应用程序关闭时,Rest Api Firebase 通知在 Swift 4 中不起作用
Firebase 存储上传图像不适用于亚马逊火灾(型号:Fire 7)
使用@angular/fire@6.0.3 无法访问firebase.firestore.FieldValue.serverTimestamp()