firebase / firestore:为文档创建和存储唯一ID(USERID用户)

时间:2018-01-29 04:56:14

标签: angular firebase google-cloud-firestore

我想根据位置为每个用户生成唯一ID。例如:如果用户来自newyouk,则ID为NY-23234。这应该在用户第一次注册我的应用时发生。

我看到我可以使用自动生成的firestore ID - 但是它作为id分配时间太长而且它不能包含任何其他字符。我正在使用angularfire2连接到firestore。

我现在在想的是: 每次注册新用户时,将用户详细信息保存在“用户集合”中(使用firestore authogenerated密钥作为文档密钥),并在“用户”集合中运行用于创建项目的firebase功能。它应该从同一位置返回最后一个单一用户ID并向其添加“1”。然后将该号码保存到新创建的用户。

任何建议PLZ?任何其他方式。

2 个答案:

答案 0 :(得分:1)

我在代码中运行了类似的问题。 我需要创建一个随机密钥,所以,我发现this code(客户端的firestore使用):

  const chars'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
  let autoId = ''
  for (let i = 0; i < 20; i++) {
    autoId += chars.charAt(Math.floor(Math.random() * chars.length))
  }

检查您的用户是否来自纽约

If (myUserIsFromNy) {
let ny = "NY ";
let res = ny.concat(autoId);
}

autoId是firestore在.add()方法上生成的id。

相反,您可以创建自己的函数并将其存储在变量

let key = myKeyFunction()

一个好主意是:

  const chars'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
  let autoId = ''
  for (let i = 0; i < 5; i++) {
    autoId += chars.charAt(Math.floor(Math.random() * chars.length))
  }

执行一项功能以查找用户所在的位置并获取该城市的前两个字母。 要开始这个,你可以检查

https://www.w3schools.com/html/html5_geolocation.asp 凭借经度和经度,你可以找到一个功能,找到它的位置,城市等... 或者,您可以通过在signUp的表单中询问来轻松完成。

然后:

let ny = "NY-"
let key = ny.concat(autoId)

可以创建一个文档:

db.ref.doc(key).set(Data)

数据是您的用户信息

运行云功能来做这个是一个糟糕的解决方案,因为服务器会对每个新用户进行额外的写操作,你应该只运行一次写入并运行两次,这将增加你的火灾成本,firestore强迫您做最佳做法,因为如果没有,您将被收取此费用。

答案 1 :(得分:1)

如果您使用angularfire2,则应使用createId()函数:

//Defination:
import { AngularFirestore } from 'angularfire2/firestore';
// in constructor
export class Foo{ constructor(private afs: AngularFirestore)}
//then use it:
const id = this.afs.createId();

注意:我不确定此ID是否唯一
编辑
在Firestore中,每个文档都有唯一的ID。您可以使用它。例如,您可以通过创建如下文档来添加额外的字段:

this.afs.collection('collection_name').add(your_obj)
.then(ref => {
ref.set({ extra_idField: ref.id }, { merge: true }).then(() => {
console.log("Your extra id field has been created");
});