防止 2 个用户在实时 Firebase 数据库中读取相同的 ID

prevent 2 users from reading the same id in Real Time Firebase database

我有一个具有这种结构的 firebase 实时数据库:

在我的应用程序中,用户从 products 中随机获得 productId,同时 productIdproducts 中删除并插入到 consumedProducts 中,然后他使用此 id 连接到 firestore 并对对象进行更改。问题是,如果 2 个用户同时访问同一页面,他们在 products 中可以获得相同的 productId。相反,我希望如果第一个获得 id ,第二个将不会得到相同的,而是另一个。我该如何解决这个问题?我已经看到了事务https://firebase.google.com/docs/database/web/read-and-write#save_data_as_transactions的使用,但这些仅用于在同一字段中写入的情况

无法防止多个用户读取数据库中的同一节点。如果你需要,你需要在你控制的服务器上,或者像 Cloud Functions 或 Cloud 运行.

这样的东西上实现你自己的自定义 API

但是由于您说您正在将密钥从 products 移动到 consumedProducts,您可能能够在交易中捕获该移动 - 并防止多个用户将相同的密钥写入consumedProducts(他们同时也从 products 中删除)。

在这种情况下,您需要 运行 在您的数据模型中的 Firebase-root 上进行交易,因此您可能需要考虑将这两个节点移动到一个共同的祖先节点下以防止发生争用跨越整个数据库。