使用数字序列定义 Firestore 文档字段值
Posted
技术标签:
【中文标题】使用数字序列定义 Firestore 文档字段值【英文标题】:Using a number sequence to define Firestore document field value 【发布时间】:2019-12-09 11:09:00 【问题描述】:我想将用户信息及其 id(不是文档 id)存储在文档中。 我想生成像 XYZ0001 这样的 id 特定格式,只要有新用户添加,最后 4 位数字就会自动增加。 例如,XYZ0001、XYZ0002 之类的。 这个我试过了...
return firestore
.collection("xyzData")
.doc(resp.user.uid)
.set(
firstName: newUser.firstName,
lastName: newUser.lastName,
email: newUser.email,
ca_id: "XYZ" + pad(firestore.collection("xyzData").count())
)
.then
pad() 是一个函数,它给我最后 4 位数字
function pad(n)
var s = "000" + n;
return s.substr(s.length - 4);
但这给了我一个错误,即 count() 不是函数
另外,我在想另一种方法,我可以读取最后一个 id 的值,然后为下一个用户将其增加一个,bust 将无法实现它。
【问题讨论】:
【参考方案1】:请注意,CollectionReference
没有 count()
方法。如果您想知道集合中的文档数量,您需要调用 asynchronous get()
方法来获取 QuerySnapshot
,然后使用 size
属性。但是,您不能将调用 get()
作为对象的属性。
解决办法是维护你自己的计数器。
有两种标准方法:
使用firebase.firestore.FieldValue.increment()
正如in the doc 解释的那样,您可以调用firebase.firestore.FieldValue.increment()
来增加Firestore 文档的特定字段。例如,您可以在 counter
集合中拥有一个文档,每次您想从序列中获取新值时,您都会递增和读取该文档。根据您的具体用例,您可能需要使用Transaction
。
还要注意“您每秒只能更新一个文档一次”。
分布式计数器
如果您需要每秒更新一次以上的计数器文档,您应该按照doc 中的说明使用分布式计数器。
【讨论】:
我制作的那个id是为了不同的目的 哦,是的,我的错误,对不起!我不知道为什么,但我以为您想使用序列号作为文档 ID!我将删除答案的第一部分。请注意,维护您自己的计数器的部分仍然有效。 非常感谢,解决了这个问题,现在,将尝试实施您建议的第二种方法...感觉更可靠的解决方案以上是关于使用数字序列定义 Firestore 文档字段值的主要内容,如果未能解决你的问题,请参考以下文章
在 java 类中为 firestore 文档指定序列化名称
Cloud Firestore 文档添加给出错误“参数“数据”的值不是有效的 Firestore 文档。不能使用“未定义”作为 Firestore 值”