【问题标题】:Firestore - Ensure document uniqueness using multiple document fieldsFirestore - 使用多个文档字段确保文档的唯一性
【发布时间】:2021-05-14 04:43:30
【问题描述】:

是否可以使用多个文档字段来确保唯一性。

例如:

在一个名为“books”的集合中,文档包含以下字段:作者、标题和出版日期。

应该允许新文档与另一个文档具有相同的作者。

新文档也可以与另一个文档具有相同的标题。

但是,如果所有三个字段都与数据库中的另一个文档相同,则不应允许写入新文档。

【问题讨论】:

    标签: firebase google-cloud-firestore


    【解决方案1】:

    如果您希望某些内容独一无二,请将其用作文档的 ID。如果您希望值的组合是唯一的,请将该值组合用作文档的 ID。

    因此,在您的情况下,您应该使用 author + title + publication date 作为文档的 ID。当您这样做时,它们在定义上将是独一无二的。

    另见:

    【讨论】:

      【解决方案2】:

      任务听起来很简单,但不幸的是,Firebase 中两个数据库的数据库规则都不支持查询。这意味着您无法检查具有特定字段值的文档是否存在,因为您无法搜索它。

      您可以使用两种可能的解决方案来完成您的任务。

      1:使用authorstitles 创建一个集合,其中键是作者姓名。我们现在为books 编写规则,如果request.data.auth && request.data.title 存在于这两个集合中,则不能创建文档。下一部分将是如果创建成功将authortitle 添加到这两个集合到lock 它们以供将来操作。您可以从客户端执行此操作,甚至可以为您执行此操作的自动化云功能。考虑到云函数可以有一个cold start,并且集合可能需要一些时间才能获得作者和标题的locked

      2:您可以创建一个callable 云函数并将图书数据发送给它。该函数将手动查询集合并检查是否存在具有相同作者和标题的书籍,如果不存在则创建一个。

      【讨论】:

        猜你喜欢
        • 2013-02-08
        • 2019-05-20
        • 1970-01-01
        • 2021-01-24
        • 2018-06-19
        • 1970-01-01
        • 2019-03-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多