在 Cloud Firestore规则中 - 我有一个名为task
的文档,我想查看某些数据(assignee
字段)是否为空/不存在
我试过了:
resource.data.assignee == null
- 不起作用(错误)!resource.data.hasAll(['assignee'])
- 不起作用(错误)从文档中 - 它表明这确实会产生错误:
// Error, key doesn't exist
allow read: if resource.data.nonExistentKey == 'value';
答案 0 :(得分:18)
阅读Firestore安全规则文档here的列表比较,我们可以看到hasAll
如果列表中存在所有值,则返回true。
// Allow read if one list has all items in the other list
allow read: if ['username', 'age'].hasAll(['username', 'age']);
request.resource.data
是包含字段和值的地图。要使用hasAll
,我们必须首先将密钥作为值列表here获取。
!resource.data.keys().hasAll(['assignee'])
答案 1 :(得分:2)
查看文档-https://firebase.google.com/docs/reference/rules/rules.Map
k in x - Check if key k exists in map x
所以这应该工作(没有keys())
!('asignee' in resource.data)
答案 2 :(得分:0)
如果要确保键为空,则需要检查该键是否不是资源键属性的一部分:
!resource.data.keys().hasAny(['assignee'])
您还可以使用hasAll
或hasOnly
。更多信息here