将数据从 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);
我需要将数据从属于一个集合的文档传输到另一个集合。怎么做都无所谓(重命名文档中的子集合,或者复制数据然后删除)。
我知道一个例子,但我需要详细分析,最好有例子。
同例:
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);