如何在 firestore 集合中生成和保证唯一值?
How to generate and guarantee unique values in firestore collection?
假设我们在 firestore 中有一个 order
集合,其中每个订单都需要有一个唯一的 可读 随机订单号,假设有 8 位数字:
{
orderNumber: '19456734'
}
因此,对于每个收到的订单,我们都希望生成这个唯一编号。在 firestore 中推荐的方法是什么以确保没有其他文档正在使用它?
注意:一种解决方案是在保存之前查询现有文档,但这在多个订单同时到达的并发场景中不起作用(?)。
保证某个值在集合中唯一的最简单方法是将该值用作该集合中文档的 key/ID。由于 keys/IDs 根据定义在其集合中是唯一的,因此这隐含地强制执行了您的要求。
生成唯一 ID 的唯一内置方法是 calling the add()
method,它会为新文档生成 UUID。如果您不想使用 UUID 来识别您的订单,则必须推出自己的机制。
两种最常见的方法:
生成一个唯一号码并检查它是否已被占用。您当然会在事务中执行此操作,以确保没有两个实例可以声明相同的 ID。
为您分发的最新 ID 保留一个全局计数器(通常在一个众所周知的位置的文档中),然后在事务中读取-递增-写入以获取任何新文档的 ID。这通常是其他数据库对其内置自动 ID 字段所做的。
假设我们在 firestore 中有一个 order
集合,其中每个订单都需要有一个唯一的 可读 随机订单号,假设有 8 位数字:
{
orderNumber: '19456734'
}
因此,对于每个收到的订单,我们都希望生成这个唯一编号。在 firestore 中推荐的方法是什么以确保没有其他文档正在使用它?
注意:一种解决方案是在保存之前查询现有文档,但这在多个订单同时到达的并发场景中不起作用(?)。
保证某个值在集合中唯一的最简单方法是将该值用作该集合中文档的 key/ID。由于 keys/IDs 根据定义在其集合中是唯一的,因此这隐含地强制执行了您的要求。
生成唯一 ID 的唯一内置方法是 calling the add()
method,它会为新文档生成 UUID。如果您不想使用 UUID 来识别您的订单,则必须推出自己的机制。
两种最常见的方法:
生成一个唯一号码并检查它是否已被占用。您当然会在事务中执行此操作,以确保没有两个实例可以声明相同的 ID。
为您分发的最新 ID 保留一个全局计数器(通常在一个众所周知的位置的文档中),然后在事务中读取-递增-写入以获取任何新文档的 ID。这通常是其他数据库对其内置自动 ID 字段所做的。