Javascript Firebase Firestore-创建文档引用并在以后使用它是否会覆盖其他文档?

Javascript Firebase Firestore-创建文档引用并在以后使用它是否会覆盖其他文档?,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,根据Firebase文档,我正在获取一个文档引用,然后在Cloud Firestore中设置文档数据 // Add a new document with a generated id. var newCityRef = db.collection("cities").doc(); // later... newCityRef.set(data); 然而,在我的应用程序中,不同的用户可以同时编写数百个文档。firebase firestore是否确保获得的文档引用不会重新用于下一

根据Firebase文档,我正在获取一个文档引用,然后在Cloud Firestore中设置文档数据

// Add a new document with a generated id.
   var newCityRef = db.collection("cities").doc();

// later...
   newCityRef.set(data);
然而,在我的应用程序中,不同的用户可以同时编写数百个文档。firebase firestore是否确保获得的文档引用不会重新用于下一个用户

例如: 用户1尝试插入一个文档,以便获得引用。 用户2还尝试同时插入一个文档。用户2是否也可能获得与用户1相同的引用-因为用户1尚未完成其操作

如果ifirestire无法处理此问题,那么正确的方法是什么?
提前感谢。

您为
newCityRef
获得的ID是全局唯一的,与您或其他客户同时创建的数百或数千个文档ID不同

在没有参数的情况下调用
.doc()
函数时,您将获得有关引用的信息

获取集合中指定路径处文档的DocumentReference。如果未指定路径,则自动生成的唯一ID将用于返回的DocumentReference

每次调用
db.collection(“cities”).doc()
都将为您提供对文档的唯一引用。您可以通过调用函数两次并比较您获得的ID来尝试这一点

作为关于如何保证ID唯一性的参考,您可以阅读为Firebase推送ID发布的文章“”。Firestore自动生成的ID遵循相同的原理(您可以看到)


可以肯定地说,每个用户的文档引用都是唯一的,当您使用以下代码行时,最多可以并发编写文档。

var newCityRef = db.collection("cities").doc();
不向
doc()
函数传递任何参数,这意味着您在
cities
集合中创建了对文档的唯一引用。在这种情况下,ID之间的冲突不太可能发生。这就是文档ID的设计目的。所以你不必担心它

但请注意,Firestore文档ID在同一集合中必须是唯一的。它们可以在其他集合或子集合中复制。您可以自己测试这个特性

因此,请记住,Firestore中使用的内置唯一ID生成器在调用CollectionReference的函数或CollectionReference的函数而不传递任何参数时,会生成随机且高度不可预测的ID,从而防止命中后端基础设施中的某些热点

所有自动生成的文档ID都是随机的,几乎不可能有两个发生冲突。客户端SDK生成一个包含20个字符的文档,每个字符允许:

  • 所有小写字母
  • 所有大写字母
  • 所有数字

因此,总共有(26+26+10)^20=7.0e35个可能的唯一ID组合,您可以/应该假设它们是完全唯一的。

谢谢您的回复Dennis。我想我也在试图理解firestore是如何知道在并发写入期间引用不存在的。更多来自firestore实施POV。我不一定能找到firebase/firestore文档提到ref总是唯一的文档。这一点很好。我在一篇文章中添加了一个链接,该文章解释了id的唯一性,并添加了一个链接,指向Firestore SDK id生成的源代码。嗨,Alex。我见过的id生成器在收集和全局上都没有什么区别。你能发个链接吗?