gpt4 book ai didi

swift - 检查文档是否存在于 Firestore 交易中

转载 作者:可可西里 更新时间:2023-11-01 00:39:21 25 4
gpt4 key购买 nike

我有一个简单的 Firestore 事务,它首先读取以验证文档是否存在,如果不存在,则执行一些写入操作。

代码片段看起来像这样

Firestore.firestore().runTransaction({ (transaction, errorPointer) -> Void in    
let snapshot: DocumentSnapshot
// First check if user already exists.
let userRef = firestore.document("users/\(user.uid)")
do {
try snapshot = transaction.getDocument(userRef)
} catch let fetchError as NSError {
errorPointer?.pointee = fetchError
return
}
if !snapshot.exists {
// Document doesn't exist. Start write operation...
...

当文档不存在时,getDocument 似乎没有返回有效的快照,而是抛出错误。我不想依赖错误来得出文档不存在的结论(因为它可能会与其他错误混淆)。

在 Firestore 事务中验证文档是否存在的正确方法是什么?

最佳答案

好吧,你可以尝试做这样的事情:

Firestore.firestore().runTransaction({ (transaction, errorPointer) -> Void in    
let snapshot: DocumentSnapshot
if let snapshot = try? transaction.getDocument(userRef) {
if snapshot.exists {
// Snapshot already exists!
return
}
}
print("Document doesn't exist. Let's get to work!")
// Perform write operations here
...

虽然这取决于您要执行的操作,但使用安全规则执行此操作可能会更容易。

例如,以下规则将允许您创建一个新的用户对象,但绝不会覆盖它。

match /users/{userID} {     
allow create: if request.auth.uid == userID;
allow update: if false;
}

那么你可以每次都尝试设置用户对象,而且它只会在第一次成功。但是,很明显,这仅在您从不真正希望您的客户端将来更新用户对象时才有效。

关于swift - 检查文档是否存在于 Firestore 交易中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48914926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com