我们有一个带有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++
})
})
})
答案 0 :(得分:0)
我能想到的一些选择:
您当前的方法可以有效,只要您:
如果您有一个使用这些ID作为文档密钥的集合,则保证唯一性可能更简单,因为ID在定义上是唯一的。这可以是您的当前/主要集合,也可以是仅跟踪声明的ID的辅助集合。在这里,交易+安全规则也是确保唯一性的关键。
或者,您可以只在方案中生成一个随机ID,然后执行与前一种方法相同的事务+规则逻辑。
您还可以创建一个文档,该文档将保留您给出的最高ID,然后为每个新用户以增量-增量方式写入该文档。同样,这将需要在事务中完成。这与有多少个数据库系统递增其自动增量值非常接近。