【问题标题】:How to delete selected document ID from Firestore如何从 Firestore 中删除选定的文档 ID
【发布时间】:2018-03-15 19:19:43
【问题描述】:

如标题。我有一个字符串shoppingListId,它包含当前在RecyclerView 文档ID 中单击的内容,我想知道如何删除这个选定的文档ID。

我尝试了以下一种,但由于类型不兼容,它不起作用:

FirebaseFirestore docRef = FirebaseFirestore.getInstance();
DocumentReference selectedDoc = docRef.collection("products").document(shoppingListId);
selectedDoc.delete();

如何获取实例到DocumentReference,然后删除选中的文档?我想这可能很容易,但我坚持下去了。

改了代码,现在没有任何错误,但是还是不行。

【问题讨论】:

  • 如果您看到错误,请将其复制到您的问题中。
  • 您在 logcat 中看到的哪些内容可能有用?

标签: java android firebase google-cloud-firestore


【解决方案1】:

我觉得你关注的是这个tutorial,其实是我做的。

您的代码中的问题在于以下行:

DocumentReference selectedDoc = docRef.collection("products").document(shoppingListId);

您不能仅使用该行代码来删除产品。您的代码不完整。要解决此问题,请将该行更改为:

DocumentReference productIdRef = rootRef.collection("products").document(shoppingListId)
            .collection("shoppingListProducts").document(productId);
productIdRef.delete().addOnSuccessListener(aVoid -> Snackbar.make(shoppingListViewFragment, "Product deleted!", Snackbar.LENGTH_LONG).show());

如果要删除 ShoppingList,首先需要删除它下面的所有内容。所以要删除一个特定的购物清单,首先你需要找到shoppingListProducts集合下的所有文档,删除它们,然后你就可以删除shoppingListId文档。

【讨论】:

  • 是的,亚历克斯,我按照您的教程进行操作,我不得不说它很棒,但我没有在 Firebase 中得到这个参考:/ 根据您的回复,也许这就是问题,因为我试图删除分配了一些集合的文档。我是否应该先删除添加到此 shoppingList 的所有产品,然后再删除空文档?我会尝试:)
  • 我设法从视图和数据库中删除了当前选择的 shoppingListId。以下代码解决了我的一半问题: FirebaseFirestore docRef = FirebaseFirestore.getInstance(); DocumentReference selectedDoc = docRef .collection("shoppingLists") .document(userEmail) .collection("userShoppingLists") .document(shoppingListId); selectedDoc.delete();但是这个列表的产品仍然保留在数据库中,我又卡在这里了,因为我不知道如何从选定的集合中一次从选定的 shoppingListId 中删除所有具有 productId 的文档。
  • 你说“仍然是这个列表的产品保留在数据库中”。购物清单中的产品仅存在于购物清单下方。至少这是我在那篇教程中所做的。如果您已将产品保存在其他位置,则以与添加它们相同的方式,您需要删除它们。有一个写批处理可以提供帮助。另请参阅我对此post 的回答。请随时通知我。
  • 一切都好吗?问题解决了吗?
【解决方案2】:
FirebaseFirestore docRef = FirebaseFirestore.getInstance();
docRef.collection("products").document(shoppingListId)
     .delete()
     .addOnSuccessListener(new OnSuccessListener<Void>() {
     @Override
     public void onSuccess(Void aVoid) {
           
           // You can write what you want after the deleting process.
     })
     .addOnFailureListener(new OnFailureListener() {
     @Override
     public void onFailure(@NonNull Exception e) {
                                       
     }
     });

【讨论】:

  • 虽然此代码可能会解决问题,including an explanation 关于如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请edit您的答案以添加解释并说明适用的限制和假设。 From Review
【解决方案3】:
DocumentReference documentReference = firestore.collection("products").document(productid);
                                            documentReference.delete().addOnCompleteListener(new OnCompleteListener<Void>() {
                                                @Override
                                                public void onComplete(@NonNull Task<Void> task) {
                                                    if (task.isSuccessful()) {
                                                        Toast.makeText(Payment_Successful.this, "ok", Toast.LENGTH_SHORT).show();
                                                    } else {
                                                        Toast.makeText(Payment_Successful.this, "Not", Toast.LENGTH_SHORT).show();
                                                    }
                                                }

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 2020-09-01
  • 2018-08-27
  • 2021-04-02
  • 2020-12-11
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
  • 2018-06-18
相关资源
最近更新 更多