ios - 如何更新不同集合中的多个文档 Firestore 文档
问题描述
我正在尝试制作一个消息传递应用程序,您使用 Firebase 创建一个包含电子邮件和密码的帐户,一旦您访问该应用程序,您可以选择是否要添加个人资料图片,这也会将您的详细信息保存在一个名为“appUsers”的集合中,这工作正常,图像的 url 被添加到“appUsers”中,其中包含所有已注册该应用程序的用户
第二部分是当用户想要保存新联系人时,他们输入新联系人的姓名和电子邮件名为“myContacts”的集合,一切正常,
我的问题是,当您更改个人资料图片时,它会在“appUsers”中更新它,但我不知道如何在保存我的详细信息的每个集合中更新该新图片网址有谁知道如何解决这个问题?
// checks if user exists, if they do save them into your own list
static func addContact(email: String, names : String, userUid : String ,com : @escaping () -> ()) {
guard let currentEmail = Auth.auth().currentUser?.email else {return}
let refrence = Firestore.firestore().collection("appUsers")
refrence.whereField("email", isEqualTo: email).getDocuments { (snapshot, Error) in
if let er = Error {
print(er)
} else {
guard let snap = snapshot else {return}
for snap in snap.documents {
let data = snap.data()
let myContacts = db.collection("contacts_for\(currentEmail)").document().collection("details")
myContacts.addDocument(data: data).updateData(["names" : names])
}
}
}
}
// This function is called if you wish to update your profile image and update the collection which holds all users
static func updateimageUrl(data: Data, currentUid : String, completion : @escaping () -> ()) {
let imageRef = Storage.storage().reference(withPath: "profileImage\(currentUid)")
imageRef.putData(data, metadata: nil) { (meta , error) in
if let error = error {
print(error.localizedDescription)
return
}
imageRef.downloadURL { (URL, Error) in
guard let url = URL?.absoluteString else {return}
let refrence = db.collection("appUsers").document(currentUid)
refrence.setData(["profileImage" : url], merge: true) { (Error) in
if let er = error {
print(er)
} else {
completion()
}
}
}
}
}
我对 iOS 非常陌生,之前从未使用过 Firestore,因此我们将不胜感激
解决方案
如果要更新多个文档,但不知道它们是什么,则必须:
- 查询文档的每个集合(可能使用您要更改的旧 URL
- 迭代每个查询的结果集
- 单独更新每个文档以包含新值
如果此任务过于繁琐,您可能需要考虑不要像现在这样复制数据。这是一种折衷——要么在需要时执行额外的查询以从单个文档中读取,要么在需要更改时执行多次更新以查找每个重复项。
推荐阅读
- docker - 无法连接到服务器:主机名可能不为空
- excel - 在 Excel 中使用文本导入向导复制矩阵
- html - TinyMCE and Drag Conflict Issues
- javascript - Vue.js 组件不会通过其数据更改其 HTML 输出
- html - Changing div based on color behind it
- python - 为什么 Python 元组中的整数比较会给出不同的答案?
- ruby - Rails GraphQL: Parameter of resolver-methods - Meaning of the semicolon-suffix?
- apache-zookeeper - Zookeeper 没有这样的文件或目录
- compiler-errors - 在jetson arm64 nvidia-docker env中编译opencv-python的自定义版本时出错
- c++ - 如何清除 IE WebBrowser Control cookie