Javascript 在Firestore中分配增量用户ID号

Javascript 在Firestore中分配增量用户ID号,javascript,google-cloud-firestore,google-cloud-functions,Javascript,Google Cloud Firestore,Google Cloud Functions,我们有一个带有google firestore DB的vuejs项目,我们需要为所有用户分配一个唯一的文件号。它必须是数字,6位数字,从000052开始 我们有大约4500名用户 我想使用谷歌云功能。如何将此文件编号分配给每个用户,并且每个用户的文件编号都会递增 我正在尝试使用firestore的limit查询来查找前一个用户,然后在当前用户中增加文件,等等,但这似乎很笨拙 db.collection('users').orderBy(id).get() .then((snapshot) =&g

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

我们有大约4500名用户

我想使用谷歌云功能。如何将此文件编号分配给每个用户,并且每个用户的文件编号都会递增


我正在尝试使用firestore的limit查询来查找前一个用户,然后在当前用户中增加文件,等等,但这似乎很笨拙

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++
    })
  })
})

我可以想到几个选择:

  • 只要您:

    • 按降序ID排序,以确保获得最后/最高ID
    • 使用事务更新数据库,使用安全规则拒绝用户覆盖现有ID

  • 如果您有一个将这些ID用作文档键的集合,那么保证唯一性可能更简单,因为根据定义,ID在其集合中是唯一的。这可以是当前/主集合,也可以是仅跟踪声明的ID的辅助集合。在这里,事务+安全规则也是确保唯一性的关键

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

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


您尝试过什么?有什么问题吗,或者你写的东西没有按你期望的方式工作吗?嘿,道格。。。老实说,我不确定最好的方法。我尝试过简单地从firebase用户uid中删除非数字,但并不总是有足够的字符,也不能保证结果是唯一的我只是在尝试使用firestore的限制查询来查找前一个用户,然后在下一个用户中增加文件#,但这看起来很笨拙。根据定义,ID在其集合中或在整个项目中是唯一的吗?是否有可能在同一Firebase项目中存在的两个不同集合中存在重复ID?是的。但请注意,Firestore自动生成的ID在统计上是唯一的。