Javascript Cloud Firestore功能在集合/文档达到有限数量后停止更改?

Javascript Cloud Firestore功能在集合/文档达到有限数量后停止更改?,javascript,firebase,react-native,google-cloud-firestore,Javascript,Firebase,React Native,Google Cloud Firestore,如果另一个集合中的文档数量达到一定数量,是否有方法停止对文档的写入? 请记住并发性-多个用户同时写入 当然可以: 在云函数中写入Firestore(可调用或https) 在函数中,有一个if子句,用于在写入之前检查文档的数量 您还必须验证用户是否有权在该函数中写入,而不是通过Firestore规则 关于实际计算文档的数量,最好的方法将取决于文档的数量和写入速度。此SO线程解决了这些问题:您可以使用阻止对该文档的写入,这对于任何客户端SDK的写入都会自动强制执行 例如,如果您有一个编号必须大于0的

如果另一个集合中的文档数量达到一定数量,是否有方法停止对文档的写入? 请记住并发性-多个用户同时写入

当然可以:

  • 在云函数中写入Firestore(可调用或https)

  • 在函数中,有一个
    if
    子句,用于在写入之前检查文档的数量

  • 您还必须验证用户是否有权在该函数中写入,而不是通过Firestore规则


  • 关于实际计算文档的数量,最好的方法将取决于文档的数量和写入速度。此SO线程解决了这些问题:

    您可以使用阻止对该文档的写入,这对于任何客户端SDK的写入都会自动强制执行

    例如,如果您有一个编号必须大于0的文档,才能允许您编写新文档,则可以通过以下方式强制执行:

    service cloud.firestore {
      match /databases/{database}/documents {
        match /orders/{order} {
          // Only allow an order for a product of there's any stock left
          allow create: 
            if get(/databases/$(database)/documents/products/$(request.resource.data.productid)).data.stock > 0
        }
      }
    }
    

    这与此密切相关:如果您在实施该方法时遇到问题,请将您尝试过的内容发回此处。@FrankvanPuffelen我认为您误解了这个问题,但这个链接肯定是我应该想到的。如果您认为我误解了这个问题,你能澄清一下吗?@FrankvanPuffelen我需要检查一个集合中的文档总数是否达到0,如果是,那么就不要发布到DB。但是,这需要牢记并发性问题。问题是OP想要检查集合中的文档数量,而这在安全规则中是不可用的。@DougStevenson改变了我的方法,我在集合的每个文档中都有一个名为Amount now的字段。所以,现在我想我可以使用事务了。弗兰克,为什么不使用事务呢?事务是客户端机制。这意味着任何恶意用户都可以通过针对您的配置数据编写自己的代码来绕过它们。因此,虽然您应该使用事务,但它们不能替代服务器端安全规则。@FrankvanPuffelen它们实际上如何绕过配置数据?