我正试图使用.update((方法在firestore中创建一个更新函数。
下面是我正在运行的函数示例:
db.collection('Users').doc(offeruserid).update({
overrideTag: process.env.A_ULTRA_SECRET_KEY,
userExperience: firebase.firestore.FieldValue.increment(Number(offerrate))
})
现在我真正想做的是,在文档中查看字段"overrideTag"是否存在。如果它不在那里,它不会更新它,只是忘记它。
此外,我希望做到这一点,而不需要首先获取数据,看看它是否存在,然后单独创建一个更新函数——我知道可以这样做。
这是我们可以在防火区内做的事情吗?
如果不先阅读文档,就无法做到这一点。通常人们会在事务中进行这样的检查和设置操作,但您应该注意,事务在编写文档之前会先读取文档
您可以在安全规则中执行此操作,方法是检查overrideTag
字段中是否存在超机密值。
service cloud.firestore {
match /databases/{database}/documents {
match /Users/{user} {
allow update: if request.resource.data.overrideTag == "YOUR_SUPER_SECRET_VALUE";
}
}
}
您还可以将所有超机密值存储在数据库中的某个位置,然后通过exists
调用检查它们是否存在。
if exists(/databases/$(database)/documents/secrets/$(request.resource.data.overrideTag))
后者将是一个收费的(可能是付费的(读取操作,但您不需要读取应用程序代码中的数据。