2024-09-29 19:36:21 发布
网友
我们正在使用谷歌的Firestore来获取嵌入式机器配置数据。因为这些数据控制一个可配置的页面流和许多其他东西,所以它被分割成许多子集合。在这个系统中,每台机器都有自己的顶级文档。然而,当我们将机器添加到机队中时,需要花费很长时间,因为我们必须手动复制多个文档中的所有数据。有人知道如何在Python中递归复制Firestore文档、所有的子集合、它们的文档、子集合等吗。您将拥有顶级文档的文档引用以及新顶级文档的名称
您可以使用类似的方法从一个集合递归地读写到另一个集合:
def read_recursive( source: firestore.CollectionReference, target: firestore.CollectionReference, batch: firestore.WriteBatch, ) -> None: global batch_nr for source_doc_ref in source: document_data = source_doc_ref.get().to_dict() target_doc_ref = target.document(source_doc_ref.id) if batch_nr == 500: log.info("commiting %s batched operations..." % batch_nr) batch.commit() batch_nr = 0 batch.set( reference=target_doc_ref, document_data=document_data, merge=False, ) batch_nr += 1 for source_coll_ref in source_doc_ref.collections(): target_coll_ref = target_doc_ref.collection(source_coll_ref.id) read_recursive( source=source_coll_ref.list_documents(), target=target_coll_ref, batch=batch, ) batch = db_client.batch() read_recursive( source=db_client.collection("src_collection_name"), target=db_client.collection("target_collection_name"), batch=batch, ) batch.commit()
写操作是成批进行的,这节省了大量时间(在我的例子中,它完成的时间是set的一半)
您可以使用类似的方法从一个集合递归地读写到另一个集合:
写操作是成批进行的,这节省了大量时间(在我的例子中,它完成的时间是set的一半)
相关问题 更多 >
编程相关推荐