【问题标题】:How to move a document between 2 collections in Firebase?如何在 Firebase 的 2 个集合之间移动文档?
【发布时间】:2021-05-02 19:57:18
【问题描述】:

我正在尝试将文档从一个集合“移动”到 Firestore 中的另一个集合。这意味着复制/粘贴文档,然后删除原件。 我正在尝试使用 Python 实现这个服务器端。

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

然后是另一个问题:为什么是事务而不是批处理?由于我正在复制/粘贴文档,这是否意味着我正在阅读它?

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

【问题讨论】:

    标签: python firebase google-cloud-firestore transactions


    【解决方案1】:

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

    作为一个通用答案,您将需要一个事务,因为:

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

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

    • 由于同样的原因,批处理无法工作:您需要读取源文档的内容才能将它们写入目标。您可以在事务之外使用get() 执行此操作,但随后有人可以对其进行修改,而您的事务不会检测到这一点(因为它只检查您在内部阅读的文档 交易)。

    但是你可能有一种特殊情况,上面的问题都不适用,在这种情况下:为它做。不过,作为一般规则,这需要进行交易。

    【讨论】:

    • 完全理解。我确实需要交易!现在从技术上讲:我是否需要将 2 个文档的引用传递给交易以完成?
    • 编辑了我的问题以添加一些代码。它有效,但我是否错过了交易中的某些内容?
    • 该编辑显着改变了问题。我建议撤消编辑,为代码打开一个新问题,并在那里提出一个具体问题。 “我想念什么”和“我不确定”真的很难回答。但是,如果您可以说更接近“我认为应该做 abc,但预计它是 xyz”的话,我们通常能够提供更好的帮助。
    猜你喜欢
    • 2021-05-03
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2015-08-19
    • 1970-01-01
    相关资源
    最近更新 更多