如何在 Firebase 的 2 个集合之间移动文档?

How to move a document between 2 collections in Firebase?

我正在尝试将文档从 Firestore 中的一个集合“移动”到另一个集合。也就是说copy/paste一个文件然后删除原来的。 我正在尝试使用 Python.

实现此服务器端

我知道使用事务可能会成功,但我想知道为什么我不能只使用基本的:.get()、.set() 和 .delete() 来做到这一点?因为另一个线程来自另一台机器并在我移动文档时修改了文档?就我而言不太可能。

还有一个问题:为什么是交易而不是批次?由于我是 copy/pasting 文档,这是否意味着我正在阅读它?

最后一点:有人有比 docs 中的例子更好的例子吗?

您最能判断您到底需要什么。

作为一般答案,您将需要一笔交易,因为:

  • 如果不使用事务,有人可能会在一次操作中读取新文件源文件。由于您想模拟移动操作,因此只有源文档或目标文档应该存在 - 而不是两者都存在。

  • 用户可能会在您的代码读取后修改源文档,但尚未编写时。在这种情况下,事务应该失败并重新读取源文档。

  • 出于同样的原因,批处理将不起作用:您需要读取源文档的内容才能将它们写入目标。您 可以 在交易之外使用 get() 执行此操作,但是有人可以修改它并且您的交易不会检测到它(因为它只检查您阅读的文档 交易中)。

但是您可能遇到一种特殊情况,其中 none 上述问题可能适用,在这种情况下:解决问题。不过,作为一般规则,这需要交易。

<p>fireStor_ins.collection("co1")<br />.document("doc1")<br />.get()<br />.addOnSuccessListener { doc -&gt;<br />if (doc.exists()) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fireStor_ins.collection("co1")<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .document("doc2")<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .set(mapOf( "var_1__dc2" to doc["var_1__dc1"],<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "var_1__dc2" to doc["var_2__dc1"]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />}</p>