在Firestore中分配增量用户ID号

时间:2019-09-09 20:51:18

标签: javascript google-cloud-firestore google-cloud-functions

我们有一个带有Google Firestore数据库的vuejs项目,我们需要为所有用户分配一个唯一的文件号。它必须是数字,6位数字,并从000052开始。

我们大约有4500个用户。

我想使用Google Cloud功能。如何为每个用户分配的文件号越来越大?

我想尝试使用Firestore的限制查询来找到先前的用户,然后在当前用户中增加File#,依此类推,但这似乎很笨拙。

db.collection('users').orderBy(id).get()
.then((snapshot) => {
  snapshot.forEach(doc => {
    let last = snapshot.docs[snapshot.docs.length - 1];
    let next = db.collection('users')
    .startAfter(last.data().id)
    .limit(1)
    db.collection('users').doc(next.id).set({
      fileId: last.id++
    })
  })
})

1 个答案:

答案 0 :(得分:0)

我能想到的一些选择:

  • 您当前的方法可以有效,只要您:

    • 降序 ID排序,以确保获得最后/最高的ID。
    • 使用事务更新数据库,并使用安全规则拒绝用户覆盖已经存在的ID。
  • 如果您有一个使用这些ID作为文档密钥的集合,则保证唯一性可能更简单,因为ID在定义上是唯一的。这可以是您的当前/主要集合,也可以是仅跟踪声明的ID的辅助集合。在这里,交易+安全规则也是确保唯一性的关键。

  • 或者,您可以只在方案中生成一个随机ID,然后执行与前一种方法相同的事务+规则逻辑。

  • 您还可以创建一个文档,该文档将保留您给出的最高ID,然后为每个新用户以增量-增量方式写入该文档。同样,这将需要在事务中完成。这与有多少个数据库系统递增其自动增量值非常接近。