将数据从 Firestore 数据库(而非实时数据库)移动到 Android Studio 中的新集合

Move data from Firestore Database (not Realtime Database) to new collection in Android Studio

我需要将数据从属于一个集合的文档传输到另一个集合。怎么做都无所谓(重命名文档中的子集合,或者复制数据然后删除)。

我知道一个例子,但我需要详细分析,最好有例子。

同例:

delete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            moveFirestoreDocument();
        }
    });
}
public void moveFirestoreDocument(DocumentReference fromPath, final DocumentReference toPath) {
    fromPath.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<DocumentSnapshot> task) {
            if (task.isSuccessful()) {
                DocumentSnapshot document = task.getResult();
                if (document != null) {
                    toPath.set(document.getData())
                            .addOnSuccessListener(new OnSuccessListener<Void>() {
                                @Override
                                public void onSuccess(Void aVoid) {

                                    fromPath.delete()
                                            .addOnSuccessListener(new OnSuccessListener<Void>() {
                                                @Override
                                                public void onSuccess(Void aVoid) {

                                                }
                                            })
                                            .addOnFailureListener(new OnFailureListener() {
                                                @Override
                                                public void onFailure(@NonNull Exception e) {

                                                }
                                            });
                                }
                            })
                            .addOnFailureListener(new OnFailureListener() {
                                @Override
                                public void onFailure(@NonNull Exception e) {

                                }
                            });
                } else {

                }
            } else {

            }
        }
    });
}

移动特定记录的代码:

delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                CollectionReference addToCartRef1 = firestore.collection("AddToCart");
                DocumentReference addToCartRef2 = addToCartRef1.document(auth.getCurrentUser().getUid());
                CollectionReference addToCartRef3 = addToCartRef2.collection("Product");
                DocumentReference fromPath = addToCartRef3.document("DiaSef1RX9xlAFm26P8M");

                CollectionReference deletedAddToCartRef1 = firestore.collection("AddToPurchased");
                DocumentReference deletedAddToCartRef2 = deletedAddToCartRef1.document(auth.getCurrentUser().getUid());
                CollectionReference deletedAddToCartRef3 = deletedAddToCartRef2.collection("Product");
                DocumentReference toPath = deletedAddToCartRef3.document("DiaSef1RX9xlAFm26P8M");
                moveFirestoreDocument(fromPath, toPath);
            }
        });

Database Structure

Continuation of the database structure

How exactly to assign collections for "fromPath" and "toPath"?

“fromPath”和“toPath”不是集合引用,而是文档引用。由于 moveFirestoreDocument() 方法包含两个参数,您必须调用该方法并将两个文档引用作为参数传递。因此,假设您有两个如下所示的集合:

Firestore-root
   |
   --- products (collection)
   |     |
   |     --- $productId (document)
   |            |
   |            --- //Document details.
   |
   --- deletedProducts (collection)
         |
         --- $productId (document)
                |
                --- //Document details.

要将文档从一个集合移动到另一个集合,请使用以下代码行:

FirebaseFirestore db = FirebaseFirestore.getInstance();
CollectionReference productsRef = db.collection("products");
DocumentReference fromPath = productsRef.document(productId);
CollectionReference deletedProductsRef = db.collection("deletedProducts");
DocumentReference toPath = deletedProductsRef.document(productId);
moveFirestoreDocument(fromPath, toPath);