如何在 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 -><br />if (doc.exists()) {</p>
<p> fireStor_ins.collection("co1")<br /> .document("doc2")<br /> .set(mapOf( "var_1__dc2" to doc["var_1__dc1"],<br /> "var_1__dc2" to doc["var_2__dc1"]<br /> ))<br /> }<br />}</p>
我正在尝试将文档从 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 -><br />if (doc.exists()) {</p>
<p> fireStor_ins.collection("co1")<br /> .document("doc2")<br /> .set(mapOf( "var_1__dc2" to doc["var_1__dc1"],<br /> "var_1__dc2" to doc["var_2__dc1"]<br /> ))<br /> }<br />}</p>