Firebase Firestore-创建文档参考并在以后使用它会覆盖其他文档吗?

时间:2019-03-26 04:52:06

标签: 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是否可以确保获取的文档参考不会被下一个用户重复使用?

例如: 用户1尝试插入文档,以便获得参考。 用户2也会尝试同时插入一个文档。由于用户1尚未完成其操作,用户2是否也可能获得与用户1相同的参考?

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

2 个答案:

答案 0 :(得分:1)

您为newCityRef获取的ID在全球范围内是唯一的,与您或其他客户同时创建的成百上千的文档ID不同。

在不带参数的情况下调用.doc()函数时所获得的关于参考的documentation states this

  

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

每次调用db.collection("cities").doc()都会给您一个文档的唯一引用。您可以通过两次调用该函数并比较您获得的ID来进行尝试。

作为有关如何保证ID唯一性的参考,您可以阅读针对Firebase推送ID发布的文章“ The 2^120 Ways to Ensure Unique Identifiers”。 Firestore自动生成的ID遵循相同的原理(您可以看到source code for the JS SDK here)。

可以肯定地说,每个用户的文档参考都是唯一的,并且您最多可以同时编写the documented limits个文档。

答案 1 :(得分:1)

使用以下代码行时:

var newCityRef = db.collection("cities").doc();

没有将任何参数传递给doc()函数,这意味着您在cities集合中创建了对文档的唯一引用。在这种情况下,id的冲突极不可能发生。这就是文档ID的目的。因此,您不必担心它。

但是请注意,Firestore文档ID在同一集合中必须唯一。它们可以在其他集合或子集合中重复。您可以自己测试此功能。

因此请记住,当您在不传递任何参数的情况下调用CollectionReference的add()函数或CollectionReference的doc()函数时,Firestore中使用的唯一ID的内置生成器会生成随机且高度不可预测的ID ,这可以防止访问后端基础架构中的某些热点。

所有自动生成的文档ID都是随机的,并且几乎没有机会使其中两个冲突。客户端SDK生成一个包含20个字符的文档,每个字符允许:

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

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