如何在firebase中限制字符串长度

时间:2018-11-22 20:07:51

标签: string firebase google-cloud-firestore

我在Firebase数据库中工作。我需要限制字符串字段的长度。我该怎么办?

该字段的路径为:

Col1 / doc1 / / / description

也就是说,从集合col1开始,然后进入doc1,然后对于doc1下的所有集合以及该集合下的所有文档,描述字段必须限制为100个字符。

有人可以告诉我该怎么做吗?谢谢

2 个答案:

答案 0 :(得分:0)

对于Cloud Firestore,您可以使用以下方法验证description字段的字符数不能超过100个。

service cloud.firestore {
  match /databases/{database}/documents {
    match /col1/doc1 {
      allow write: if resource.data.description.length <= 100;

        match /subcollection1/{doc=**} {
          allow  write: if resource.data.description.length <= 100;
        }
    }
  }
}

这适用于col1/docsubcollection1中的所有文档。请注意,这些规则不会限制描述的长度,因为安全规则无法修改写入的数据。相反,规则会拒绝描述超过100个字符的文字。

(据我所知)没有办法将规则应用于仅一个文档的每个子集合。我所知道的最接近的方法是将其应用于所有文档及其子集合:

match /col1/(document=**} {
  allow write: if resource.data.description.length <= 100;
}

这会将验证应用于col1中的所有文档以及该文档下的所有子集合中。

答案 1 :(得分:0)

我尝试从其他答案中获得验证,但没有成功。 Firestore只是不喜欢检查资源数据值的.length。

我到处搜索,这篇文章对我有帮助: https://fireship.io/snippets/firestore-rules-recipes/

dicts=[{0: 'ATO'}, {1: 'CC'}, {1: 'CD'}, {2: 'GYU'}, {2: 'JOI'}, {3: 'AFD'}]
values = {}
for d in dicts:
    for key, val in d.items():
        if key in values:
            values[key].append(val)
        else:
            values[key] = [val]

for val in values.values():
    print(", ".join(val))