【问题标题】:Android - Firebase Firestore - Write the same document to different collectionsAndroid - Firebase Firestore - 将相同的文档写入不同的集合
【发布时间】:2018-08-22 02:22:00
【问题描述】:

我必须将 same 文档写入不同的集合,所以我认为批量写入对此不利。我想知道firestore数据库中是否有一个函数,我希望用javascript编写,可以复制我写一次的文档并将其粘贴到不同的位置。这些位置应从数据库中的数组中读取。

谁能帮帮我?

非常感谢,抱歉我的英语不好。

【问题讨论】:

  • 为什么你认为批量写入不适合这个?为什么需要将它写入两个集合?他们不能都引用相同的记录ID吗?
  • 我正在创建一个群聊应用程序,对于通知,我必须将相同的文档粘贴到他们收听的每个成员集合中。为每个组只创建一个集合意味着每个用户都应该为他所在的每个组都有一个监听器......我认为这不是一个好主意。
  • 哦,这是个好主意。请查看我的回答,也请逐步查看我的 tutorials 之一,如何duplicate data 以实现确切的目标。

标签: javascript android firebase google-cloud-functions google-cloud-firestore


【解决方案1】:

Cloud Firestore 中的 Batched writes 就是为了这个目的。

您可以将多个写入操作作为一个批处理执行,其中包含 set()、update() 或 delete() 操作的任意组合。一批写入原子完成,可以写入多个文档。

作为对您问题的回答,是的,您可以使用此批处理写入操作将相同的文档写入不同的集合。

这是代码中的样子:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference productsRef = rootRef.collection("products");
CollectionReference newProductsRef = rootRef.collection("newProductsRef");

WriteBatch writeBatch = rootRef.batch();
batch.set(productsRef.document(), yourObject);
batch.set(newProductsRef.document(), yourObject);

// This how you commit the batch
writeBatch.commit().addOnCompleteListener(new OnCompleteListener<Void>() {
    @Override
    public void onComplete(@NonNull Task<Void> task) {
        // ...
    }
});

使用此代码,您将能够将相同的 yourObject 对象写入 Cloud Firestore 数据库中的两个不同位置。

【讨论】:

  • 使用批处理写入相同文档的正确方法是什么?
  • 非常感谢。最后一个答案...我可以像我只写一次一样在几毫秒内写出 500 次相同的文档吗?
  • 有一些限制。请查看Firestore quotas。如果记录太多,我建议你小块写,以免写出问题。
猜你喜欢
  • 1970-01-01
  • 2018-12-10
  • 1970-01-01
  • 2021-08-30
  • 1970-01-01
  • 2018-10-21
  • 1970-01-01
  • 2021-03-18
  • 1970-01-01
相关资源
最近更新 更多